2391번 Sascha | 뭐라도 하겠지

2391번 Sascha

이왜틀?


img01

2391번 Sascha - 백준

String w=br.readLine(); // 발음한 단어
String r=""; // 제출단어
int c=w.length(); // 바꾼횟수
int d=0; // 총횟수
int n=Integer.parseInt(br.readLine()); // 사전수

while(n-->0) {
    String s=br.readLine(); // 사전단어
    Set<String> set=new HashSet<>();
    int e=0;
    for(int i=0;i<s.length();i++) {
        if(w.charAt(i)!=s.charAt(i)) {
            set.add(w.charAt(i)+" "+s.charAt(i));
            e++;
        }
    }
    if(set.size()<c) {
        c=set.size();
        r=s;
    }
    if(set.size()==c) {
        if(d>e) {
            d=e;
            r=s;
        }
    }

}
bw.write(r+"\n");

와 이럴수가 1년 전 내가 주석을 다 남겨뒀다니
어지간히 답답했나보다
근데 Set을 왜쓴거지?
계속 틀려서 정신이 나가버린 것인가?

설계


Sascha가 발음한 단어와 사전단어를 비교해서 다른 횟수를 key로 Map에 담으면 간단하지 않을까?
파이썬이니까 dict를 사용하면 되겠다.

구현


만약 동일한 수일 경우 입력 사전 순 가장 앞서는 단어 하나만 출력하면 된다.
따라서 key가 중복되지 않을 경우에만 최초로 삽입한다.

from collections import defaultdict

T = int(input())

for _ in range(T):
    
    sascha_word = input().strip()
    w = int(input().strip())

    dictionary = defaultdict(str)

    for _ in range(w):
        word = input().strip()
        count = 0
        for sascha_char, word_char in zip(sascha_word, word):
            if sascha_char != word_char:
                count += 1
        
        # 최초 사전 입력 유지
        if count not in dictionary:
            dictionary[count] = word
        
    print(dictionary[min(dictionary.keys())])

채점


img02

반성


예전에도 이런 경우가 있었던 것 같다.
Map 쓰면 바로 해결될 문제를 안쓰고 뻘짓한 기억이 있는 것 같은데
왜 그랬지? 1년 전이면 큰 문제 없었을텐데

코드 확인


Link to GitHub

Updated: