
결과

단순한 문제인데 접근을 아스키 코드를 사용하는 방식으로해서 빙빙 돌아간것 같다. 게다가 파이썬의 함수를 익히지 못한결과 매우 1차원적인 코드를 작성했다.. 시간 차이가 5배라니.. 잘 짜여진 다른 사람의 코드를 참조하는건 필수인 것같다.
c언어로 짠 것 같은 첫번째 코드
s = input()
cnt = [0]*26 # A-Z까지 빈 배열 생성
# 대소문자 구분없이 알파벳 사용횟수 저장
for i in range(len(s)):
if( ord(s[i])>96):
index = ord(s[i])-97
cnt[index] += 1
else:
index = ord(s[i])-65
cnt[index] += 1
max_index =cnt.index(max(cnt))
# 최댓값 중복 확인
for i in cnt[max_index+1:]:
if(max(cnt)!= i):
continue
else:
print("?")
exit(0)
print(chr(max_index+65))
두번째 코드
s = input().upper()
s_alpha =list(set(s)) # 단어의 중복된 알파벳 제외하고 저장
cnt = []
for i in s_alpha:
cnt.append(s.count(i))
if cnt.count(max(cnt)) > 1:
print("?")
else:
max_index = cnt.index(max(cnt))
print(s_alpha[max_index])
풀이과정
첫번째 풀이
1. 어떤 알파벳이 몇 번 사용되었는지 저장한다.
아스키 코드를 활용해서 대소문자 구분없이 입력받은 단어에 특정 알파벳이 사용된 횟수를 저장하도록 했다. 리스트의 인덱스를 알파벳으로 생각하고, 사용된 횟수를 계산했다.
s = input()
cnt = [0]*26 # A부터 Z까지 알파벳 배열 생성
# 대소문자 구분없이 알파벳 사용횟수 저장
for i in range(len(s)):
if( ord(s[i]) > 96):
index = ord(s[i]) - 97
cnt[index] += 1
else:
index = ord(s[i]) - 65
cnt[index] += 1
2. 최대값의 중복을 체크한다.
최대값의 인덱스를 구하고 이후의 인덱스에서 같은 값이 존재하면 “?”를 출력하고 아니면 최대값의 인덱스를 알파벳으로 출력하게 했다.
max_index =cnt.index(max(cnt))
# 최댓값 중복 확인
for i in cnt[max_index+1:]:
if(max(cnt)!= i):
continue
else:
print("?")
exit(0)
print(chr(max_index+65))
두번째 풀이
1. 어떤 알파벳이 몇 번 사용되었는지 저장한다.
일단, 모든 알파벳을 리스트에 저장할 필요가 없다. 단어에 사용된 알파벳만 저장한다. 먼저 대소문자의 구분을 없애기 위해 모든 알파벳을 대문자로 변환한다. 그리고 중복된 알파벳을 제거하여 리스트를 생성한다.
s = input().upper()
s_alpha =list(set(s)) # 단어의 중복된 알파벳 제외하고 저장
2. 최대값의 중복을 체크한다.
중복된 문자를 확인하기 위해 입력받은 단어에 특정 문자가 사용된 횟수를 새로운 리스트에 저장한다.
cnt = []
for i in s_alpha:
cnt.append(s.count(i))
횟수 리스트에 최대값이 2개 이상 존재하면 “?”를 출력하고 아니면 최대값을 가지는 알파벳을 출력한다. 여기서, 알파벳 리스트의 인덱스는 횟수 리스트와 연결된다.
if cnt.count(max(cnt)) > 1:
print("?")
else:
max_index = cnt.index(max(cnt))
print(s_alpha[max_index])
두번째 코드 참고
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 12865 평범한 배낭(파이썬) - 냅색 알고리즘 (0) | 2023.09.27 |
---|---|
하노이탑 (0) | 2023.02.09 |
재귀함수 시간초과 (0) | 2023.02.08 |

결과

단순한 문제인데 접근을 아스키 코드를 사용하는 방식으로해서 빙빙 돌아간것 같다. 게다가 파이썬의 함수를 익히지 못한결과 매우 1차원적인 코드를 작성했다.. 시간 차이가 5배라니.. 잘 짜여진 다른 사람의 코드를 참조하는건 필수인 것같다.
c언어로 짠 것 같은 첫번째 코드
s = input()
cnt = [0]*26 # A-Z까지 빈 배열 생성
# 대소문자 구분없이 알파벳 사용횟수 저장
for i in range(len(s)):
if( ord(s[i])>96):
index = ord(s[i])-97
cnt[index] += 1
else:
index = ord(s[i])-65
cnt[index] += 1
max_index =cnt.index(max(cnt))
# 최댓값 중복 확인
for i in cnt[max_index+1:]:
if(max(cnt)!= i):
continue
else:
print("?")
exit(0)
print(chr(max_index+65))
두번째 코드
s = input().upper()
s_alpha =list(set(s)) # 단어의 중복된 알파벳 제외하고 저장
cnt = []
for i in s_alpha:
cnt.append(s.count(i))
if cnt.count(max(cnt)) > 1:
print("?")
else:
max_index = cnt.index(max(cnt))
print(s_alpha[max_index])
풀이과정
첫번째 풀이
1. 어떤 알파벳이 몇 번 사용되었는지 저장한다.
아스키 코드를 활용해서 대소문자 구분없이 입력받은 단어에 특정 알파벳이 사용된 횟수를 저장하도록 했다. 리스트의 인덱스를 알파벳으로 생각하고, 사용된 횟수를 계산했다.
s = input()
cnt = [0]*26 # A부터 Z까지 알파벳 배열 생성
# 대소문자 구분없이 알파벳 사용횟수 저장
for i in range(len(s)):
if( ord(s[i]) > 96):
index = ord(s[i]) - 97
cnt[index] += 1
else:
index = ord(s[i]) - 65
cnt[index] += 1
2. 최대값의 중복을 체크한다.
최대값의 인덱스를 구하고 이후의 인덱스에서 같은 값이 존재하면 “?”를 출력하고 아니면 최대값의 인덱스를 알파벳으로 출력하게 했다.
max_index =cnt.index(max(cnt))
# 최댓값 중복 확인
for i in cnt[max_index+1:]:
if(max(cnt)!= i):
continue
else:
print("?")
exit(0)
print(chr(max_index+65))
두번째 풀이
1. 어떤 알파벳이 몇 번 사용되었는지 저장한다.
일단, 모든 알파벳을 리스트에 저장할 필요가 없다. 단어에 사용된 알파벳만 저장한다. 먼저 대소문자의 구분을 없애기 위해 모든 알파벳을 대문자로 변환한다. 그리고 중복된 알파벳을 제거하여 리스트를 생성한다.
s = input().upper()
s_alpha =list(set(s)) # 단어의 중복된 알파벳 제외하고 저장
2. 최대값의 중복을 체크한다.
중복된 문자를 확인하기 위해 입력받은 단어에 특정 문자가 사용된 횟수를 새로운 리스트에 저장한다.
cnt = []
for i in s_alpha:
cnt.append(s.count(i))
횟수 리스트에 최대값이 2개 이상 존재하면 “?”를 출력하고 아니면 최대값을 가지는 알파벳을 출력한다. 여기서, 알파벳 리스트의 인덱스는 횟수 리스트와 연결된다.
if cnt.count(max(cnt)) > 1:
print("?")
else:
max_index = cnt.index(max(cnt))
print(s_alpha[max_index])
두번째 코드 참고
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 12865 평범한 배낭(파이썬) - 냅색 알고리즘 (0) | 2023.09.27 |
---|---|
하노이탑 (0) | 2023.02.09 |
재귀함수 시간초과 (0) | 2023.02.08 |