20211022 TIL

JIHYE·2021년 10월 22일
0

오늘 배운 것

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를 사용하니까 속도가 더 개선되었다)
다들 매우 열심히 해서 나도 많이 자극받고 같이 열심히 하게되고 서로에게 긍정적인 영향을 주는것 같다는 생각이 든다. 남은기간동안 서로에게 작지만 큰 도움이 되는 관계가 되면 더할나위없이 기쁠것 같다.

profile
초보개발자의 개발일기

0개의 댓글