[백준] 9046번 - python

syeony·2024년 7월 20일
0

python

목록 보기
12/12


문제가 주저리 주저리 길지만 핵심은,

<입력>
첫줄 : 몇줄 입력받을거냐
두번째줄부터~ : 공백포함 아무 알파벳이나

<출력>
제일 많이 나온 알파벳 출력
만약 겹친다면 ? 출력

그렇다.

처음 문제를 봤을때는 배열을 쓰지않고 for문으로 알파벳 하나하나 비교하면서 카운트수가 max인 알파벳을 그때그때 저장하면 되지 않을까 생각했다. 하지만 그렇게 푸니 max인 겹치는 알파벳이 나올때 ?로 출력하는 것이 곤란해졌다.

그래서 생각해낸 방법은 set과 list를 사용한 것이다.
일단 입력받은 한줄을 set으로 받아 겹치는 알파벳이 없도록 저장하고, 그것을 다시 리스트로 바꾸어주었다.(그래야 배열에서 쓸 수 있는 다양한 함수들을 사용할 수 있었다...)

그리고 set에 저장된 알파벳 각각의 카운트를 처음 입력받은 list에서 세주고, set_cnt 배열에 별도로 저장해주었다.
set_cnt에서 가장 큰 수를 m변수에 저장하고,
만약 m변수가 1보다 크면 ?를 출력하고
아니면 set_cnt함수에서 index함수를 사용하여 m변수가 있는 자리의 알파벳을 출력해주었다.

코드

N=int(input())

for i in range(0,N):
    a = input()
    a = a.replace(" ","")

    s1=set(a)
    s2=list(s1)

    s2_cnt=[]

    for j in range(0,len(s2)):
        s2_cnt.append(a.count(s2[j]))
    
    m=max(s2_cnt)

    if s2_cnt.count(m)>1:
        print('?')
    else:
        m2=s2_cnt.index(m)
        print(s2[m2])

아, 그리고 마지막까지 끙끙대다 결국 검색한 부분이 있는데,
" "(공백)을 ""로 바꿔주는 코드를 안적었었다.
추가해줬더니 정답...

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글