[백준][python] 1157.단어공부 -문자열
아래의 문제는 '백준'의 알고리즘 문제 내용이며 코드는 직접 푼 내용입니다.
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] 형태가 메모리를 덜 쓴다.
참고
참고한 블로그 링크