[백준] - 1157 단어공부

SeomIII·2023년 1월 19일
0

BAEKJOON

목록 보기
6/7
post-thumbnail

✅ 문제

https://www.acmicpc.net/problem/1157

  1. 처음 풀이
strings=list(input().upper())

no_replay=list(set(strings))
result_table=[0]*len(no_replay)

for i in range(len(no_replay)):
    result_table[i]=strings.count(no_replay[i])

max_resultindex= result_table.index(max(result_table))

# print(no_replay, result_table, max_resultindex,len(result_table))

result=''

for i in range( max_resultindex , len(result_table)):  

    if ( i+1 == len(result_table)):
        result=no_replay[max_resultindex]
        break

    elif(result_table[max_resultindex] == result_table[i+1]):
        result='?'
        break

    else:
        result=no_replay[max_resultindex]


print(result)
  • 대문자와 소문자를 구별하지 않고 최종 출력을 대문자로 하니까 upper 함수를 사용해서 대문자로 바꾸고 풀어야한다고 생각했다.
  • 중복을 제거한 배열을 새로 만들고 기존 배열에서 for문을 이용해 count 함수를 사용해서 각 알파벳이 몇번씩 사용됐는가의 배열을 만든다.
  • 그 배열에서 max값을 찾고, 중복되는 max값이 있으면 ?, 없으면 그 인덱스의 값을 반환해주면 된다고 생각했다.
  • max 함수는 중복되는 값이 존재해도 가장 첫번째에 있는 인덱스를 반환하므로 그 이후 부터 for문을 돌면서 비교하면 된다고 생각했다. 여기서부터 뭔가 꼬이기 시작했다.
  • 배열의 길이가 1일수도 있고, max index가 맨 끝값일 수 도 있다는 것을 간과했다.
  • 이를 max index + 1 == len(result_table) 일 때로 조건문을 통해 해결했다.

✔️ 생각보다 꽤 많은 시간이 걸렸다.🥲

💡 다른 사람의 코드를 참고했더니!

  • 내가 고민했던 부분을 하나도 고민하지 않고 풀 수 있었다. 왜 이걸 생각을 못했을까?
  • 중복되지 않는 알파벳들의 배열을 구했고, 그 알파벳들이 count 되어있는 배열을 구했다. 그리고 최댓값도 안다. 그러면 count 되어있는 배열들 중 max값이 2개 이상 존재하는가? 만 판단하면 되는 일인데!!
if (result_table.count(result_table[max_resultindex]) > 1 ):
    result='?'
else:
    result=no_replay[max_resultindex]
profile
FE Programmer

0개의 댓글