백준 - 파이썬 1157 단어 공부
문제 소개

문제 예시

내가 푼 방법

일단 s 에 ZzfaqerdfzzZdfq 라고 input() 사용하여 값을입력받는다. (입력값은 작성자가 아무거나 넣었다.)
여기서 입력 받을 때 .upper()를 사용하는데 upper는 입력받을 때, 전부 대문자로 up해서 입력받아주는 함수이다.
그리고 문장에서 단어들의 빈도를 측정하기 위해 list로 변환시킨다.
여기서 s_set을 선언하고 할당으로 list(set(s))를 사용하는데 set은 형변환할 때, 자료형의 중복을 허용하지 않기에 중복을 제거하는 역할로 쓰인다.
그리고 set()을 사용하면 순서는 무작위가 된다.
print를 하여 아래 출력된 모습을 보면 이해가 더 쉽다.
그리고 단어 카운트를 위한 cnt[] 리스트 집합을 만들었다.
for i in range(len(s_set)) i는 s_set의 길이(단어의 갯수)만큼 반복하며
처음 입력 받은 s ( ZzfaqerdfzzZdfq) 에 list를 씌워 아래 그림과 같이 만들어 알파벳 하나 하나 사용할 수 있게 만들고,
['Z', 'Z', 'F', 'A', 'Q', 'E', 'R', 'D', 'F', 'Z', 'Z', 'Z', 'F', 'D', 'F', 'Q']
s_set[i] R,F,Z,A,E,Q,D 순으로 카운트를 시작한다.
-> 좀 어려울 수 있는데 s_set[i]를 통해 위 그림 list(s)에서 R이 몇개 있는지 카운트하고, 카운드한걸 cnt[]에 append한다.
[1]
R이 나온 횟수를 append 된 모습이다.
s_set의 길이 만큼 반복하기 때문에
R F Z A E Q D순으로 전부 한 번씩 대입하여 몇 개 있는지 카운트 하고 최종 cnt[]의 모습은
[1, 4, 5, 1, 1, 2, 2]
이와 같은 모습이 된다.
[1, 4, 5, 1, 1, 2, 2] 는 R, F, Z, A, E, Q, D가 처음 입력받은 list(s)에 몇번 씩 있는지 최종 나타낸 cnt[] 이다.
마지막 코드
if cnt.count(max(cnt)) > 1:
print("?")
else:
print(s_set[cnt.index(max(cnt))])
여기서 if문 사용하여 max(cnt)가 1 이상 즉, 가장 많이 나온 알파벳 max(cnt)가 2개 이상이면 문제에서 "?"를 출력하라고 하여 조건을 걸었고
else문으로 중복이 되지 않는다면, 가장 많이 나온 알파벳을 출력하게 만들었다.