Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프론트엔드
- 개발
- 웹개발
- React Query
- 웹프로토콜
- nextjsmiddleware
- prettier
- 알고리즘
- 개발공부
- 개발블로그
- 백준1264
- frontend
- 백준
- TypeScript
- 그룹단어
- NextJs
- 코드개선
- Nest.js
- react
- WebDev
- Design system
- jotai
- 모음의개수
- 리액트
- 디자인 시스템
- 개발자성장
- securitypatch
- 리액트쿼리
- Next.js
- 알고리즘스터디
Archives
- Today
- Total
한땀한땀
백준 1264번 - 모음의 개수 본문
알고리즘 문제를 풀다 보면, 가끔은 "이게 끝이야?" 싶을 정도로 간단한 문제를 만나기도 합니다. 하지만 단순해 보이는 문제라도 더 효율적인 접근 방식을 고민해 보면, 코드 최적화에 대한 감각을 키울 수 있죠. 오늘은 백준 1264번 "모음의 개수" 문제를 풀면서, 코드 개선 과정까지 함께 살펴보겠습니다.
문제 파악
- 주어진 문장에서 모음('a', 'e', 'i', 'o', 'u')의 개수 세기
- 각 문자는 소문자이고, 입력되는 문장은 여러 줄로 주어지며, 줄의 끝에는 "#"이 입력되어야 종료.
- 각 문장에서 모음의 개수를 세고, 각 줄마다 그 개수를 출력
접근 방법
문장에서 모음만을 골라서 개수를 세는 문제이므로, 다음과 같은 흐름으로 접근할 것 같습니다.
- 입력을 한 줄씩 받아 처리
- 문장의 마지막은 #이므로 이를 만나면 종료
- 각 문장을 순회하며 모음의 개수를 세고 출력
첫 번째 풀이
- 입력을 리스트에 저장한 후, 리스트를 순회하며 모음 개수를 카운트
- if char in 모음을 사용하여 매번 리스트에서 확인
import sys
fast_input = sys.stdin.readline
모음 = ["a", "e", "i", "o", "u"]
arr = []
while True:
phrase = fast_input().lower().strip()
if phrase == "#":
break
arr.append(phrase)
for row in arr:
cnt = 0
for char in row:
if char in 모음:
cnt += 1
print(cnt)
첫 번째 풀이의 문제점
- 불필요한 리스트를 사용하여 메모리 사용이 증가.
- if char in 모음: 에서 리스트를 탐색하므로, 최악의 경우 O(n)의 시간복잡도를 가질 수 있다.
두 번째 풀이
첫 번째 풀이에서 사용한 불필요한 리스트 저장을 제거하고, set 자료구조를 활용하여 조회 속도를 O(1)로 개선해 볼 수 있을 것 같습니다.
import sys
fast_input = sys.stdin.readline
모음 = {"a", "e", "i", "o", "u"}
while True:
phrase = fast_input().strip().lower()
if phrase == "#":
break
print(sum(1 for char in phrase if char in 모음))
첫 번째 풀이와 비교하여 다음과 같은 이점을 가질 수 있었습니다.
- 리스트를 제거하여 별도의 저장없이 바로 처리하여 메모리 사용을 절약
- set을 사용하여 O(1) 시간 복잡도를 가진 조회 로직
- 가독성 증가
이번 문제는 단순한 로직속에서도 코드 최적화를 고민할 수 있는 문제였던 것 같습니다.
처음에는 직관적인 방식으로 해결하고, 이후에는 메모리 최적화와 성능 개선을 고려하는 습관을 들이면 더욱 좋은 코드를 작성할 수 있다는 걸 알게 되었습니다.
'Computer Science > Algorithm' 카테고리의 다른 글
백준 1316번 - 그룹 단어 체커 (0) | 2025.03.31 |
---|---|
선형 탐색과 배열, 문자열의 관계 (0) | 2025.03.29 |