https://www.acmicpc.net/problem/1157
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]