티스토리 뷰

연습

[Python] 파이썬 코테 연습1

onaeonae1 2021. 2. 13. 13:15

들어가는 글

 

4월부터 파이썬을 많이 다뤄야 해서 조금씩 연습하고 있다.

파이썬에 여러 내장함수들이 있고, 이를 최대한 활용해서 코드를 작성해나갈 필요가 있다.

쉬운 문제부터 시작해서 풀고 느낀 점들을 정리해보려고 한다.

 

문제

 

처음 시도한 문제는 이거다.

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

입력받은 문자열을 대문자로, 많이 등장한 글자를 세고, 그게 유일하다면 출력. 유일하지 않다면 ? 출력하는 문제다.

 

문제를 쓱 보고 이렇게 구현했다.

 

import sys
a = [0 for i in range(26)]
max_value = -1
max_index = 0
count = 0
str = sys.stdin.readline().rstrip('\n')
str = str.upper()
for i in str:
    code = ord(i)-65
    a[code] = a[code]+1
    if(a[code] > max_value):
        max_value = a[code]
        max_index = code+65
for item in a:
    if(item == max_value):
        count = count + 1
if(count == 1):
    print(chr(max_index))
else:
    print('?')

 

뭔가 느리다

한번에 맞기는 했지만, 채점할 때 시간이 꽤 걸리고 코드가 C/C++로 짤 때랑 너무 차이점이 없어서 빠르게 돌아간 모범답안 코드를 찾고 비교했다.

word = input().upper()
letters = [word.count(chr(c)) for c in range(65, 91)]
m = max(letters)
if letters.count(m) == 1:
    print(chr(letters.index(m) + 65))
else:
    print('?')

훨씬 빠르다

비교

 

두 코드를 비교해 보자면, 차이점은 내장함수를 적절하게 사용하는가에 있다고 생각한다.

 

대문자로 변환 -> .upper()

카운팅 -> .count()

최대 -> max()

 

그리고 letters를 초기화 하는 부분을 보면 [ ] 안에 내용이 들어가 있는데, 파이썬에서는 이런 식으로 배열을 초기화 할 수 있다고 한다. 굉장히 C 처럼 코드를 보자면 for c in range(65,91) 이 밖에 나오고, 그 안에 빈 letters라는 list에 word.count(c) 를 append 하는 식으로 생각할 수 있다.

 

느낀 점

C/C++ 에서 파이썬으로 연습을 하려니 생각보다 어렵다. 그래도 이런 식으로 코드를 짜는 연습을 꾸준하게 해야겠다.

우선 문자열 위주로 풀어보고, 람다 쓰는 부분이랑 딕셔너리 부분을 보려고 한다.

 

참고 자료

리스트 초기화

길이가 정해진 리스트 만들기

문자열 count, len

 

'연습' 카테고리의 다른 글

docker logs  (0) 2021.05.06
[selenium] WebDriverWait  (2) 2021.05.04
채팅 서버 구현하면서 궁금한점들 2  (0) 2021.02.08
[MongoDB] Mongoose Schema Statics/Method  (0) 2021.01.29
채팅 프로그램 구현하면서 궁금한 점  (0) 2021.01.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함