아래의 문제는 '백준'의 알고리즘 문제 내용이며 코드는 직접 푼 내용입니다.
1157. 단어공부
문제 및 입출력
입출력예시
나의시도
dict를 가지고 이러쿵저러쿵 해보려고 했다.
그래서 {문자열 : 횟수}의 dict를 만들고 여기에서 조건에 맞게 하나하나씩 해결해갔지만 넘 노가다여서 시간초과.
결과
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
dict[str]=S.count(str)
#print(dict)
#가장 큰 count값 가져오기
max=0
for key, value in dict.items():
if max<value:
max=value
#print(max)
#가장 큰 count값이 있는 key(result)가져오기
count=0
for key,value in dict.items():
if max==value:
count=count+1
#print(key,value)
result=key
#print(count)
#max count값이 2개이상이면 ? 출력, 아니면 그 result
if count>=2:
print('?')
else:
print(result)
풀이과정
- is.upper() : 대소문자 상관없이 가장 많이 사용된 문자열을 알기 위해 모든문자열을 대문자로 통일 시켰다.
- dict={} : 각 문자열마다 몇번씩 나왔는지 알기 위해 key,value형식이 필요하다고 생각했다.
dict[str]=S.count(str) : 리스트안에서 각각의 문자열 str이 몇번 나왔는지를 value로 넣기 위해 count를 썻다.
여기까진 좋았다. 근데 count와 max를 구하는게 비효율적이라고 느껴졌다.
그래서 조금더 코드를 바꾸었따. 하지만 그래도 여전히 '시간초과'인것!
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
dict[str]=S.count(str)
#print(dict)
#가장 큰 count값 가져오기
max=0
result=0
for key, value in dict.items():
if max<value:
max=value
result=key
elif max==value:
result='?'
print(result)
그렇다면 시간초과의 원인이 혹시 'count'인 것일까? 해서 if문으로 변경했다.
그랬더니 통과했다..휴..
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
if str in dict:
dict[str]+=1
else:
dict[str]=1
#print(dict)
#가장 큰 count값 가져오기
max=0
result=0
for key, value in dict.items():
if max<value:
max=value #가장큰 count값 max로 가져오기
result=key #가장큰 count값이면 그때 key가져오기
elif max==value: #또 한번 가장큰값과 같다? 그럼 중복인경우!
result='?'
print(result)
놀랍게도 처음에 작성했던 나의 구닥다리 코드에서 count 대신 위와 같은 방법으로 작성해도 통과과 되긴 된다..
시간은 10초정도밖에 차이가 나지 않는다..
덧붙여 dict.items()로 딕셔너리를 검색하는 것 보다
for i in dict:로 해서 key=i, valvue=key[i] 로 받는게 메모리를 덜 쓰는듯 했다.
배운점
- count를 직졉 사용하면 속도가 느려진다, 대신 if로 문자열 검색을 하자.
- dict를 검색할땐 key,value보다 i, dict[i] 형태가 메모리를 덜 쓴다.
참고
참고한 블로그 링크
아래의 문제는 '백준'의 알고리즘 문제 내용이며 코드는 직접 푼 내용입니다.
1157. 단어공부
문제 및 입출력
입출력예시
나의시도
dict를 가지고 이러쿵저러쿵 해보려고 했다.
그래서 {문자열 : 횟수}의 dict를 만들고 여기에서 조건에 맞게 하나하나씩 해결해갔지만 넘 노가다여서 시간초과.
결과
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
dict[str]=S.count(str)
#print(dict)
#가장 큰 count값 가져오기
max=0
for key, value in dict.items():
if max<value:
max=value
#print(max)
#가장 큰 count값이 있는 key(result)가져오기
count=0
for key,value in dict.items():
if max==value:
count=count+1
#print(key,value)
result=key
#print(count)
#max count값이 2개이상이면 ? 출력, 아니면 그 result
if count>=2:
print('?')
else:
print(result)
풀이과정
- is.upper() : 대소문자 상관없이 가장 많이 사용된 문자열을 알기 위해 모든문자열을 대문자로 통일 시켰다.
- dict={} : 각 문자열마다 몇번씩 나왔는지 알기 위해 key,value형식이 필요하다고 생각했다.
dict[str]=S.count(str) : 리스트안에서 각각의 문자열 str이 몇번 나왔는지를 value로 넣기 위해 count를 썻다.
여기까진 좋았다. 근데 count와 max를 구하는게 비효율적이라고 느껴졌다.
그래서 조금더 코드를 바꾸었따. 하지만 그래도 여전히 '시간초과'인것!
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
dict[str]=S.count(str)
#print(dict)
#가장 큰 count값 가져오기
max=0
result=0
for key, value in dict.items():
if max<value:
max=value
result=key
elif max==value:
result='?'
print(result)
그렇다면 시간초과의 원인이 혹시 'count'인 것일까? 해서 if문으로 변경했다.
그랬더니 통과했다..휴..
s=input()
S=list(s.upper())
dict={}
#dict {문자열 : 횟수}
for str in S:
if str in dict:
dict[str]+=1
else:
dict[str]=1
#print(dict)
#가장 큰 count값 가져오기
max=0
result=0
for key, value in dict.items():
if max<value:
max=value #가장큰 count값 max로 가져오기
result=key #가장큰 count값이면 그때 key가져오기
elif max==value: #또 한번 가장큰값과 같다? 그럼 중복인경우!
result='?'
print(result)
놀랍게도 처음에 작성했던 나의 구닥다리 코드에서 count 대신 위와 같은 방법으로 작성해도 통과과 되긴 된다..
시간은 10초정도밖에 차이가 나지 않는다..
덧붙여 dict.items()로 딕셔너리를 검색하는 것 보다
for i in dict:로 해서 key=i, valvue=key[i] 로 받는게 메모리를 덜 쓰는듯 했다.
배운점
- count를 직졉 사용하면 속도가 느려진다, 대신 if로 문자열 검색을 하자.
- dict를 검색할땐 key,value보다 i, dict[i] 형태가 메모리를 덜 쓴다.
참고
참고한 블로그 링크
'코딩 테스트' 카테고리의 다른 글
[백준][python]1920.수찾기 - 이진탐색 (0) | 2021.07.05 |
---|---|
[python] 문자열매칭. KMP 알고리즘 (백준16916, 백준1786) (0) | 2021.07.05 |
[백준][python]1436.영화감독 숌 -완전탐색(브루트포스) (0) | 2021.06.10 |
[HackerRank] Symmetric Pairs | Self Join (0) | 2021.05.31 |
[HankerRank] The PADS | CONCAT, SUBSTR (0) | 2021.05.31 |
[Python] 코딩테스트 고득점Kit | DFS/BFS1 - 타겟넘버 (0) | 2021.05.28 |