20211022 TIL
오늘 배운 것
algorithm
baekjoon no.1157
- dictionary를 이용한 풀이
string = input().upper() # 마지막에 대문자 출력을 위해 미리 변환
word_dict = {} # 빈 dictionary 생성
value = 0 # 초기화한 value 값 생성
for word in string:
if word in word_dict:
word_dict[word] += 1 # dictionary에 저장된 문자는 value++ 해주고
else: # 없는 값은 key값을 저장하면서 value++
word_dict[word] = value + 1
max_count = max(word_dict.values()) # value값이 가장 큰 문자들 찾기
max_word = []
for key,value in word_dict.items(): # max_count에 저장된 key, value 찾기
if value == max_count: # max_count와 value값이 같다면
max_word.append(key) # key값을 max_word에 저장
if len(max_word) != 1: # 동일한 value 값을 가진 문자가 있으면
print('?')
else: # 유일한 최빈값을 가진 문자라면
print(max_word.pop())
- Counter 함수 사용
from sys import stdin # stdin.readlind() 사용을 위한 import
from collections import Counter # Counter() 사용을 위한 import
word = stdin.readline().strip().upper() # 문자열 입력받기
most_word = Counter(word).most_common(2)
# Counter함수안에 입력받은 변수를 넣고
# most_common()함수를 사용해 가장 많이 입력된 문자 2개를 찾는다
if len(most_word) >= 2: # 가장 많이 나온 문자가 1개일때를 대비한 예외처리
first_word = most_word[0]
second_word = most_word[1]
# most_common() 함수를 사용하면 [('문자': 개수)] 로 되어있기 때문에 문자를 먼저 저장
if first_word[1] == second_word[1]: # 가장 많이 나온 문자가 1개가 아니므로 '?' 출력
print('?')
else:
print(first_word[0]) # 가장 많이 나온 문자 출력
else:
print(most_word[0][0]) # most_word에 저장된 값이 1일때 출력
Python 문법
input() 과 stdin.readline()
- input() : 문자열을 받는 함수. 정수로 받고 싶을때는 int()로 꼭 형변환을 해주어야 한다
- stdin.readline() : 대량의 데이터를 반복적으로 받아야할때 input() 함수보다 빠르게 처리할 수 있다. 대신
import sys
를 해주어야 사용 가능. 개행문자가 함께 저장되기 때문에 제거해주어야하고, input()과 마찬가지고 문자열로 저장되기때문에 정수로 사용하고 싶다면 형변환이 필요하다
Counter
python에서 제공해주는 class. from collections import Counter
를 해주면 간단하게 문자의 개수를 알수있다. 출력될때는 Counter({'문자' : 개수}) 형태로 출력된다
- most_common(n) : 최빈값 n개를 반환해준다. [('문자' : 개수)] 형태로 출력된다. 1157번 해설에서 most_common(2)를 한 이유는 최빈값이 여러개가 있으면 무조건 ?를 출력하라고 했기때문에 2개만 비교해보았다.
오늘 느낀 점
우리팀은 가장 인원수가 많은 5명이 한팀으로 이루어져있는데, 같은 문제를 5명이 풀면 방법이 5가지가 나오는 신기한 경험을 하게되었다. 정말 사람들은 다 생각이 다르구나 라는걸 느꼈다. 나는 문제를 보자마자 dictionary를 생각했는데 다른 팀원은 강의에서 본 방법을 사용하기도 하고, 또 다른 팀원은 직접 구글링하여 Counter 함수를 사용하기도 했다. 다른 팀원들의 풀이를 내 방식대로 변형해보기도 하면서 새로운 지식을 많이 쌓게되는 기회가 되어서 기쁘다. 다른 팀원의 아이디어를 차용하여 나도 Counter를 사용해보았고 그 덕에 새로운 class를 알게되었다. (dictionary를 사용한 내 첫 풀이보다 Counter를 사용하니까 속도가 더 개선되었다)
다들 매우 열심히 해서 나도 많이 자극받고 같이 열심히 하게되고 서로에게 긍정적인 영향을 주는것 같다는 생각이 든다. 남은기간동안 서로에게 작지만 큰 도움이 되는 관계가 되면 더할나위없이 기쁠것 같다.
Author And Source
이 문제에 관하여(20211022 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihye/20211022-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)