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 |
Tags
- 프로그래머스
- javascript
- dfs
- Two Pointer
- modbus
- heapq
- typescript
- VectoreStore
- ansible
- docker
- BFS
- turbo
- jenkins
- 파이썬
- 알고리즘
- rag
- DP
- OpenAI
- LLM
- CI/CD
- Algorithm
- python
- javascirpt
- build
- frontend
- Infra
- React
- AI
- queue
- monorepo
Archives
- Today
- Total
DM Log
[연습문제] 롤케이크 자르기- Python / Javascript 본문
문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제 간단 요약]
1. 롤케이크에 여러 종류의 토핑이 얹어져 잇음
2. 롤케이크를 자를 때, 왼쪽과 오른쪽의 토핑 종류 수가 같게하는 지점의 수 반환하는 문
[문제 해결 방안] - 항목배열 방식
1. 왼쪽, 오른쪽 토핑의 수를 관리
2. 전체 토핑이 오른쪽에 있다고 가정하고 배열 카운트
3. 왼쪽으로 하나씩 토핑을 옮기면서 토핑 갯수 비교
[문제 해결 코드 - python]
def solution(topping):
answer = 0
topping_l = [0]*(max(topping)+1)
topping_r = [0]*(max(topping)+1)
l_count = 0
r_count = 0
for topp in topping:
topping_r[topp] += 1
if topping_r[topp] == 1:
r_count+=1
for topp in topping:
topping_r[topp] -= 1
topping_l[topp] += 1
if topping_r[topp] == 0:
r_count-=1
if topping_l[topp] == 1:
l_count+=1
if r_count == l_count:
answer+=1
return answer
[문제 해결 코드 - javascript]
function solution(topping) {
let answer = 0;
let r = Array(10001).fill(0)
let l = Array(10001).fill(0)
let r_c = 0
let l_c = 0
for (let i = 0; i < topping.length; i++) {
r[topping[i]] += 1
if (r[topping[i]] === 1) {
r_c += 1
}
}
for (let i = 0; i < topping.length; i++) {
r[topping[i]] -= 1
l[topping[i]] += 1
if (r[topping[i]] === 0) {
r_c -= 1
}
if (l[topping[i]] === 1) {
l_c += 1
}
if (l_c === r_c) {
answer += 1
} else if (l_c > r_c) {
return answer
}
}
return answer;
}
[코드 비교 요약]
- 항목배열 방식 vs set/Counter 방식
| 시간 복잡도 | O(N) | O(N) |
| 공간 복잡도 | O(M) | O(N) |
| 상수 시간 연산 | ✅ | ❌ |
| 메모리 제한 우수 | ✅ | ❌ |
| 코드 간결성 | ❌ | ✅ |
[문제 해결 코드 - python] - set/Counter 방식
from collections import Counter
def solution(topping):
left = set()
right = Counter(topping)
answer = 0
for t in topping:
left.add(t)
right[t] -= 1
if right[t] == 0:
del right[t]
if len(left) == len(right):
answer += 1
return answer'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [DFS/BFS] 타겟 넘버 - Python / Javascript (1) | 2025.07.15 |
|---|---|
| [BFS] 게임 맵 최단거리 - Python (0) | 2025.07.14 |
| [스택/큐] 프로세스 - Python / Javascript (0) | 2025.07.13 |
| [해시] 전화번호 목록 - Python / JavaScript (2) | 2025.07.07 |
| [2019 카카오 개발자 겨울 인턴십] 튜플 - Python / JavaScript (0) | 2025.04.15 |