ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1157번 단어 공부
    백준 코딩테스트 2024. 10. 28. 21:39

    문제

    알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

    입력

    첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

    출력

    첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

    예제 입력 1 복사

    Mississipi
    

    예제 출력 1 복사

    ?
    

    예제 입력 2 복사

    zZa
    

    예제 출력 2 복사

    Z
    

    예제 입력 3 복사

    z
    

    예제 출력 3 복사

    Z
    

    예제 입력 4 복사

    baaa
    

    예제 출력 4 복사

    A

     

    word = input().upper()
    char_dict = dict()

    # Count the frequency of each character
    for w in word:
        if w in char_dict:
            char_dict[w] += 1
        else:
            char_dict[w] = 1

    # Find the character with the highest frequency
    max_value = max(char_dict.values())
    max_keys = [k for k, v in char_dict.items() if v == max_value]

    # Check if there is more than one character with the same highest frequency
    if len(max_keys) == 1:
        print(max_keys[0])
    else:
        print('?')

     

    이게 제가 한건데, 원래는 max(count_dict)만 해줬다가 계속 틀려서 왜인지 잘 몰랐는데,

    dict에 max를 그냥해버리면 key값을 기준으로 비교를 해서 알파벳이 제일 뒤에 있는 거가 크기 때문에 그 값을 뽑는 다고 하더라구요. 배워갑니다... 잊었던 정보..

    하지만 200ms라는 속도가 나왔는데, 음 꽤나 느린 속도가 나온 것 같아서 다른 분들이 한 걸 확인해봤는데, 

    word = input().upper()
    word_list = list(set(word))

    cnt = []
    for i in word_list:
        cnt.append(word.count(i))

    if cnt.count(max(cnt)) > 1:
        print('?')
    else:
        print(word_list[cnt.index(max(cnt))])

    다음과 같이 진행했더라구요, 저는 for문이 무려 2개라 시간 비용이 컸는데,

    다른 분들은 for문 1개로 word 변수 즉 문자열 자체에 반복문을 걸어서 하나 하나 문자에 대한 count를 진행했고, 그것을 리스트화 했습니다. 이후 max(cnt)에 대한 값, 알파벳이 가장 많은 값을 cnt 리스트에 count해서 가장 많이 있는 알파벳이 1개 이상인지 체크해주고, 맞으면 ? 출력, 아니라면 word_list에서 cnt에 대한 index를 찾는데, 그 값은 cnt의 max 값 그러면 cnt의 최대값에 대한 index를 찾고, 그걸로 word_list의 index로써 찾으면 값이 제대로 나옵니다.

    word_list와 cnt는 같은 문자를 가르키기 때문이조랭이떡..

     

    max 값이 여러 개 인지 확인해주기 위해서 구한 max 값으로 다시 cnt에 count해주면 된다. 

    좋은 방법...

     

    이런 생각의 폭을 더 늘려보도록 할게요.

    너무 for문만 사용하려고해서 그러는듯..

    '백준 코딩테스트' 카테고리의 다른 글

    1316번 그룹 단어 체커  (0) 2024.10.30
    2941번 크로아티아 알파벳  (0) 2024.10.30
    10988번 팰린드롬인지 확인하  (0) 2024.10.28
    2444번 별 찍기 - 7  (0) 2024.10.28
    3003번 킹, 퀸, 룩, 비숍, 나이트, 폰  (0) 2024.10.28
Designed by Tistory.