728x90
반응형

1157번 문제

VERSION 4.0

import sys
import collections

A = list(sys.stdin.readline().rstrip().upper())
A = collections.Counter(A).most_common()
if len(A)>1:
    if A[0][1] == A[1][1] :
        print('?')
    else:
        print(A[0][0])
else:
    print(A[0][0])

==> collections.Counter() 활용 , list 로 입력받을 때 upper() 함수 활용하기

VERSION 3.0

A  ==> 리스트로 받을때 sorted함수와 upper함수 모두 동시에 사용가능하다!!!!

import sys

A = sorted(list(str(sys.stdin.readline().rstrip().upper())))

res2 = sorted(list(set(A)))
# print(res)
# print(res2)z

gaet2 = []
for i in range(len(res2)):
    gaet = A.count(res2[i])
    gaet2.append(gaet)
if gaet2.count(max(gaet2))>=2:
    print('?')
else:
    print(res2[gaet2.index(max(gaet2))])

 

VERSION 2.0

 

import sys

A = list(str(sys.stdin.readline().rstrip()))
res = []
# print(B)
for i in A:
    res.append(i.upper())
res2 = sorted(list(set(res)))
res = sorted(res)
# print(res)
# print(res2)z

gaet2 = []
for i in range(len(res2)):
    gaet = res.count(res2[i])
    gaet2.append(gaet)
if gaet2.count(max(gaet2))>=2:
    print('?')
else:
    print(res2[gaet2.index(max(gaet2))])

count()함수 활용

but. 시간이 오래걸린다. 연구해봐야할듯

 

 

VERSION 1.0

import sys
while True:
    alpha = list(str(sys.stdin.readline().rstrip())) #단어 알파벳입력 대소문자 상관없이
    #EX) PARKSUNGHYUK==>['P','A','R','K','S','U','N','G','H','Y','U','K']
    #alpha = list(str(sys.stdin.readline().rstrip().split()))
    #==>ABCDE ==>['ABCDE']
    if len(alpha)>1000000:
        print("단어의 길이는 1000000을 넘지않습니다.")
    else:
        c,d , mid , fin2 =[] ,[] , [] ,[]
        max1 ,index, max2 = 0, 0,0
        for i in alpha:
            c.append(i.upper()) #c는 모든문자 대문자 처리
        d = sorted(list(set(c))) #중복값 제외 , c값의 중복값 제외시켜서 정렬
        print("중복값 제외한 사용한 문자 : " ,d)
        for j in d: 
            mid.append(c.count(j)) 
            #중복값제외한 기준 요소문자를 중심으로 C에 있는 단어의 개수 세어서 mid리스트에 추가
        print("사용한문자의 개수 : ", mid) #['2','3','4']
        max1 = max(mid) #[2,3,4] ==>4 변수에 저장  
        for p in range(len(mid)): 
            fin2.append(mid.count(max1)) 
            #mid리스트에 있는 max1값 세어서 fin2에 저장
            if fin2[p] >=2: #fin2[p] 값이 2이상이라면 중복값 존재한다는 뜻!
                print('?') #물음표 출력
                break #반복문 종료
            else:
                for k in range(len(mid)):
                    if max2 < mid[k]: #max값 출력해보기
                        max2 = mid[k]
                        index = k
                    if k == (len(mid)-1):
                        print(d[index])
                break
        break

★★★KeyPoint★★★

3번째줄 : 계속해서 입력값을 string으로 받을때 단어 전체로 받아야하는지 단어 하나씩 받아야 하는지에 대해 헷갈려 하고 있다.

객체 = list(map(str,input())) ==> 이라면 단어 글자 하나씩 받게끔 하도록 하는것이고,

객체 = list(map(str,input().split())) ==> 이러면 단어를 기준으로 받는 것임을 꼭 기억해두자

 

 

13번째줄 : c객체에 alpha로 받은 리스트의 요소들을 for문을 통해 string으로 변환하여 대문자로 다 바꾼다.

14번째줄 : d객체에 sorted함수를 통해 ['A' ,'B']처럼 정렬 시킨다. ==> 중복값 제외 시켜서!(SET함수는 SET객체이므로 list(set())이렇게 처리해주어야한다.

16~18번째줄 : count함수를 통해 중복값을 제외한 기준 문자가 alpha로 받은 대문자로 이루어진 c객체에 존재하면 갯수를 세어 mid객체에 저장시킨다.

 

20번째줄 : max1 = max(mid) ==> 사용한 문자의 개수가 저장되어있는 mid 리스트의 요소중 최대값을 max1 변수에 저장시킨다.

 

21번째줄~23번째줄 : 사용한 문자의 갯수가 저장되어있는 mid리스트 내에 max1값과 같은 요소의 갯수를 더한다.

24~26번째줄 : 만약 max1값과 같은 요소의 개수가 2개이상이라면 사용한 문자의 개수가 똑같음을 의미하므로 반복문을 종료시킨다. 

28번째 줄: 사용한문자의 개수 리스트의 길이만큼 반복 하여 if문을 통해 max값을 구하게 되고 , if문이 들어맞는다면 index변수에 k값(인덱스)값을 저장시킨다.

 

32번째줄 : 반복문이 마지막일때  d객체(중복값 제외한 기준문자열)리스트의 인덱스값의 요소값을 출력시킨다.

 

 

 

728x90
반응형

+ Recent posts