[백준 파이썬 1157번] collections.Counter() ★ 활용단어 공부★map()함수를 통한 객체 저장법 익히기★count()함수를 통한 개수세기★VER4.0
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객체(중복값 제외한 기준문자열)리스트의 인덱스값의 요소값을 출력시킨다.
'Python(백준) > 문자열' 카테고리의 다른 글
[백준 파이썬 1316번]그룹단어 체커★rfind() , find()함수 활용하기★VER3.0 (0) | 2023.03.28 |
---|---|
★count()함수 활용하기★★문자열 슬라이싱★[백준 파이썬 2941번 크로아티아 알파벳] (0) | 2023.03.28 |
★문자열 슬라이싱★[Python 백준 10988 번 팰린드롬인지 확인하기] (0) | 2023.03.28 |
★range 범위 잘 지정하기★문자열★[Python 백준 10812번 바구니바꾸기] (0) | 2023.03.28 |
★range 범위 잘 지정하기★문자열★[Python 백준 2444번 별찍기] (0) | 2023.03.27 |