[ 이것이 코딩테스트다 ] 39일차

안영우·2021년 2월 23일
0
post-thumbnail

📍 [ 문제 7 ] 백준 1157 - 단어 공부

백준 1157 - 단어 공부

💡 나의 풀이

언젠가 이 문제를 보고 풀 엄두가 나지 않아서 북마크로 추가만 했었는데, 오늘 다시보니까 풀 수 있었다.
약간 까다로운 문제인데 count, index 함수를 사용하면 금방 풀 수 있었다.

먼저 for문을 풀어서 작성하고 이후에 list_comprehension으로 코드를 단축시켰다.

이해하기 쉽도록 예제 입력에 나와있는 Mississipi를 기준으로 알아보자.

  1. 입력을 대문자 or 소문자로 통일 시킨다. (set으로 변환하기 위함.)
  2. 입력을 set으로 형 변환을 시켜 중복을 제거한다.
  3. set형으로 for문을 돌려 i값이 몇 번 쓰였는지 확인하고 빈 리스트에 append시킨다.
  4. count_list = [1, 4, 1, 4]가 나오게 되는데 이는 compress_s = ['S', 'P', 'I', 'M']가 몇 번 사용됐는지 count한 값이다.
  5. 조건문을 통해 만약, [1, 4, 1, 4]count(max_index) 즉, max값이 2개 이상(가장 많이 사용된 알파벳의 갯수가 동일하다는 의미다)이면 ?를 출력하고
  6. 그렇지 않으면, count_list.index(max(count_list)) 즉, count_listcount가 가장 많이 선언된 index의 위치를 반환하고 그 값을 count_list[]에 넣어주면 어떤 값이 가장 많이 쓰였는지 알 수 있다.
    이때, compress_slist로 변경해야 index를 대입 할 수 있다.
  7. 6번의 과정을 하나씩 살펴보기 전에 먼저, set은 순서가 정해져있지 않기때문에 결과값의 순서가 바뀔 수도 있다.
  8. print(count_list.index(max(count_list))) = 1이고, 이는compress_s[1]과 같다.
  9. compress_s = ['A', 'B'] 따라서, compress_s[1] = B이다.

조금 복잡하지만 구현 과정을 천천히 손으로 써내려가면 금방 이해 할 수 있다.

s = input().upper()
compress_s = list(set(s))
count_list = [s.count(i) for i in compress_s]

if count_list.count(max(count_list)) > 1:
    print('?')
else:
    print(compress_s[count_list.index(max(count_list))])
profile
YW_Tech

0개의 댓글