ISFJ 개발자의 이야기

백준 Refrigerator Magnets - 4575 본문

알고리즘

백준 Refrigerator Magnets - 4575

ISFJ 개발자의 이야기 2025. 6. 13. 01:03

오늘은 백준 4575문제를 풀어봤습니다.

 

문제

결과적으로 반복된 문자가 없는 문장만 출력하는 문제입니다.

아래의 사진과 같이 문자가 중복이 있는 문장은 출력하지 않고 중복이 없는 문장만 출력하게 코드를 짜면 됩니다.

풀이

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    string content;

    while (true) {
        getline(cin, content);

        if (content == "END") {
            break;
        }

        vector<int> alphabet_count(26, 0);
        bool possible = true;

        for (char c : content) {
            if (c == ' ') {
                continue;
            }

            int index = c - 'A';

            alphabet_count[index] += 1;

            if (alphabet_count[index] > 1) {
                possible = false;
                break;
            }
        }

        if (possible) {
            cout << content << endl;
        }
    }
}

 

C++을 사용해서 풀었으며, 위의 나온 예시를 바탕으로 코드를 구성하면 됩니다.

 

종료조건은 입력된 값이 "END"이면 종료 이므로 If문을 사용해서 구현하였고, 입력된 값이 END가 아닐 경우 반복문을 돌려서 "index = c - 'A';" 코드를 통해 각 알파벳에 맞는 배열 주소를 구하고 "alphabet_count[index] += 1;" 코드를 통해 그 주소값에 +1을 하도록 구현하였습니다.

 

그리고 제일 중요한 아래의 코드를 통해 1보다 클 경우 중복된 문자가 있는 경우 이므로 possible 변수를 false로 바꾸어 그 문장은 출력되지 않도록 구현하였습니다. 결과적으로 possible 변수가 true인 경우 중복된 문자가 없는 경우 이므로 그 문장은 출력되도록 구현하였습니다.

if (alphabet_count[index] > 1) {
    possible = false;
    break;
}

 

arr[c - 'A'] 에 대해서

 

c는 영문자를 저장하는 변수 입니다.

c - 'A'는 해당 문자를 0부터 시작하는 인덱스로 변환합니다.

예시)

만약 c = 'A'라면

c - 'A' = 'A' - 'A' = 0이 됩니다. 따라서 arr[0]을 참조합니다.

만약 c = 'B'라면

c - 'A' = 'B' - 'A' = 1이 됩니다. 따라서 arr[1]을 참조합니다.

만약 c = 'Z'라면

c - 'A' = 'Z' - 'A' = 25가 됩니다. 따라서 arr[25]를 참조합니다.

'알고리즘' 카테고리의 다른 글

백준 ACM 대회 채점 - 11531  (0) 2025.06.13