파이썬 백준 1157번
브론즈1
https://www.acmicpc.net/problem/1157
문제 보기
분류: 구현, 문자열
문제 풀기
주어지는 단어의 길이는 1,000,000 이기 때문에 for loop 을 전체 돌리다가 혹시 시간 초과 걸릴까 싶어 최대한 파이썬 내장 함수를 이용하였다.
주어진 입력 문자를 하나하나 정리해가며 결과 출력을 시행하였다.
그 순서는
> 모두 대문자 변환
> 각각 문자 리스트 변환 저장
> set() 함수를 이용하여 중복 제거 및 존재 알파벳만 저장
> 존재 알파벳의 해당 문자와 개수를 2차원 리스트로 저장
> 2차원 리스트를 개수에 대하여 내림차순 정리
> 조건에 따른 결과 return
로 작성하였다.
> 모두 대문자 변환, 결과 출력을 대문자로 원하고 있어서..
word_up = word.upper()
> 각각 문자 리스트 변환 저장
word_up_ls = list(word_up)
> set() 함수를 이용하여 중복 제거 및 존재 알파벳만 저장
word_up_ls_set = set(word_up_ls)
> 존재 알파벳의 해당 문자와 개수를 2차원 리스트로 저장
count_ls = []
for ws in word_up_ls_set:
count_ls.append([ws, word_up_ls.count(ws)])
> 2차원 리스트를 개수에 대하여 내림차순 정리, set() 을 사용하여 순서가 엉망이기에..
count_ls.sort(key = lambda x: -x[1])
> 조건에 따른 결괏값 return
if len(count_ls) == 1:
return count_ls[0][0]
elif count_ls[0][1] == count_ls[1][1] and len(count_ls) > 1:
return "?"
else:
return count_ls[0][0]
처음에 하나의 문자에 대해 바로 return 할 수도 있지만 코드의 가독성을 위해 마지막 부분에 모아서 작성하였다.
그리고, and len(count_ls) > 1 는 이전 len(count_ls) == 1 에서 걸러지는 것이지만 확인 사살하기 위해 적어둠.
코드 보기
일부러 하나하나 확인하는 작업이 많아 test print 가 많이 끼어들었다.
import sys
inputdata = sys.stdin.readline
def fnCountAlphabet(word_up):
word_up_ls = list(word_up)
print(f'word_up_ls: {word_up_ls}') # test print
word_up_ls_set = set(word_up_ls)
print(f'word_up_ls_set: {word_up_ls_set}') # test print
count_ls = []
for ws in word_up_ls_set:
count_ls.append([ws, word_up_ls.count(ws)])
print(f'count_ls: {count_ls}') # test print
count_ls.sort(key = lambda x: -x[1])
print(f'sorted count_ls: {count_ls}') # test print
if len(count_ls) == 1:
return count_ls[0][0]
elif count_ls[0][1] == count_ls[1][1] and len(count_ls) > 1:
return "?"
else:
return count_ls[0][0]
if __name__ == "__main__":
word = str(inputdata().strip())
print(f'word: {word}') # test print
word_up = word.upper()
print(f'word_up: {word_up}') # test print
result = fnCountAlphabet(word_up)
print(result)
# Mississipi
# word: Mississipi
# word_up: MISSISSIPI
# word_up_ls: ['M', 'I', 'S', 'S', 'I', 'S', 'S', 'I', 'P', 'I']
# word_up_ls_set: {'P', 'S', 'M', 'I'}
# count_ls: [['P', 1], ['S', 4], ['M', 1], ['I', 4]]
# sorted count_ls: [['S', 4], ['I', 4], ['P', 1], ['M', 1]]
# ?
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 1002 - 터렛 (0) | 2022.11.11 |
---|---|
[Python] 백준 풀기 1152 - 단어의 개수 (0) | 2022.11.10 |
[Python] 백준 풀기 1406 - 에디터 (0) | 2022.11.08 |
[Python] 백준 풀기 9095 - 1, 2, 3 더하기 (0) | 2022.11.07 |
[JavaScript] 백준 풀기 2438 - 별 찍기 - 1 (0) | 2022.11.06 |