안녕하세요 오늘부터 학교에서 알고리즘 스터디를 시작하게 되었습니다.
그런의미에서 어차피 매주 풀 문제, 블로그와 겸겸하면 좋겠다싶어서 기억에 남는 한가지 문제에 대해
저의 코드주머니를 좀 만들어보려고 합니다. 응원좀 해주세요
*코드에 대한 피드백은 언제나 환영입니다.😀
백준 1157 : 단어공부
문제
접근법
처음 든 생각은 16진수를 이용한 접근이였다 대문자와 소문자의 차이는 일정하니까 파이썬은 처음이라 내장함수에 대해서는 잘 모르고 반복문 어떻게 쓰는지 변수는 어떻게 쓰는지 밖에 모르는 상태였다.
일단 문자를 입력받아야 하니 https://wikidocs.net/25 에서 사용자 입출력 함수를 검색 중 Dictionary 라는 자료형을 보게 되었음
key 값에 알파벳을, value에 빈도수를 넣어서 계산하면 되겠다 생각 -> 사용법은 copliot을 이용함
첫 코드
#딕셔너리 이용해보기
word = input().strip().upper()
#print(word)
dic = {}
for Alp in word: #파이썬에서는 문자열은 Iterable object이기 때문에 한문자씩 읽을수 있음 우와~
if Alp in dic:
dic[Alp] +=1
else:
dic[Alp] = 1
#딕셔너리에서 가장 높은 숫자 찾기 , 같으면 -> ?
max = 0
ans = [] * 1
#print(dic.keys())
#print(dic.item()) 우리는 빈도수는 필요 없으니까 dic의 value값이랑 비교해서 key만 뽑아내면 되지 않을까?
for count in dic.values():
if count > max:
max = count
ans = dic.keys
elif count == max:
ans[0] = "?"
print(ans)
- 문제점
- max는 파이썬 내장함수이기 때문에 변수이름으로 적절하지 않음
- 문자열 하나만 저장할려고 ans = [ ] *1로 크기지정 해준거였는데 그냥 ans = [ ]로 만 하면 되잖아;
- ans = dic.keys
- 반환값을 dic.keys 객체로 직접 출력하면 문제가 발생함
- 리스트로 변환해서 출력해야됌 -> ans = list(dic.keys())
1차 수정
#딕셔너리 이용해보기
word = input().strip().upper()
#print(word)
dic = {}
for Alp in word: #파이썬에서는 문자열은 Iterable object이기 때문에 한문자씩 읽을수 있음 우와~
if Alp in dic:
dic[Alp] +=1
else:
dic[Alp] = 1
#딕셔너리에서 가장 높은 숫자 찾기 , 같으면 -> ?
max_count = 0
ans = []
#print(dic.keys())
#print(dic.item()) 우리는 빈도수는 필요 없으니까 dic의 value값이랑 비교해서 key만 뽑아내면 되지 않을까?
for count in dic.values():
if count > max_count:
max_count = count
ans = list(dic.keys())
elif count == max_count:
ans = "?"
print(ans)
#print(dic)
#print(max_count)
- 문제점
- zZa 입력시 ans의 배열이 제대로 수정이 안되서 ['Z', 'A'] 이렇게 나옴
- ans = list(dic.keys(count)) 같은 느낌으로 작성되면 좋을거 같은데 이런 의미로 할려면 list안에 for문으로 하는 방법 알려줘서 그냥 items( ) - dictionary함수 이용하기로함
⭐정답 코드⭐
#딕셔너리 이용해보기
word = input().strip().upper()
#print(word)
dic = {}
for Alp in word: #파이썬에서는 문자열은 Iterable object이기 때문에 한문자씩 읽을수 있음 우와~
if Alp in dic:
dic[Alp] +=1
else:
dic[Alp] = 1
#딕셔너리에서 가장 높은 숫자 찾기 , 같으면 -> ?
max_count = 0
ans = "?"
#print(dic.keys())
#print(dic.item()) 우리는 빈도수는 필요 없으니까 dic의 value값이랑 비교해서 key만 뽑아내면 되지 않을까?
for key, count in dic.items():
if count > max_count:
max_count = count
ans = key
elif count == max_count:
ans = "?"
print(ans)
#print(dic)
#print(max_count)
- ans의 초기화 값을 ?로 설정해주고 items으로 순회하면서 key값은 ans에 때려박음
오늘의 한줄 후기
공부하자 파이썬, 공부하자 알고리즘