백준, 외계인의 기타 연주, 2841
2024. 8. 19. 12:30ㆍETC/Algorithm
[유형]
자료구조, stack
[문제링크]
https://www.acmicpc.net/problem/2841
[요약]
손가락을 수십억개 갖고 있는 외계인이 기타를 치려고 한다.
기타는 6개의 줄이 있고, 각각의 줄은 P개의 플랫으로 나뉘어진다.
프렛을 누른 상태로 줄을 튕기면 음을 연주할 수 있는데, 어떤 줄의 프렛을 여러 개 누르고 있다면 가장 높은 음이 들린다.
손가락으로 프렛을 누르거나 떼는 것을 한번 움직였다고 할 때, 횟수를 최소화하는 방법을 구하는 프로그램을 작성하시오.
[문제풀이]
1. 빈 리스트 안에 7개의 리스트를 생성한다.
2. 스택이 비어있다면, 스택에 append를 해주고 ans+1
3. 스택이 비어있지않고, 스택의 마지막 값이 b보다 크다면, 스택의 마지막 값 pop, ans+1
4. 스택이 비어있거나, 스택의 마지막 값이 b보다 작다면, 스택에 append, ans+1
5. 이외의 경우 pass
import sys
def input():
return sys.stdin.readline().rstrip()
n,p = map(int,input().split())
s = [[] for _ in range(7)]
ans = 0
for _ in range(n):
a,b = map(int,input().split())
if not s[a-1]:
s[a-1].append(b)
ans+=1
else:
while s[a-1] and s[a-1][-1] > b :
s[a-1].pop()
ans+=1
if not s[a-1] or s[a-1][-1] < b :
s[a-1].append(b)
ans+=1
else:
pass
print(ans)
🌟 pass continue break 차이점
pass 실행할 코드가 없는 것으로 다음 행들을 계속해서 진행한다.
for i in range(10):
if i % 2 == 0:
pass
print(i)
else:
print(i)
print("Done")
```실행결과
0
1
2
3
4
5
6
7
8
9
Done
```
continue 바로 다음 순번의 루프를 수행한다.
for i in range(10):
if i % 2 == 0:
continue
print(i)
print(i)
print("Done")
```실행결과
1
3
5
7
9
Done
```
break 반복문을 멈추고 루프 밖으로 나간다.
for i in range(10):
if i % 2 == 0:
break
print(i)
else:
print(i)
print("Done")
```실행결과
Done
```
'ETC > Algorithm' 카테고리의 다른 글
백준, 나는야 포켓몬 마스터 이다솜,1620 (0) | 2024.08.20 |
---|---|
백준,문자열집합,14425 (0) | 2024.08.20 |
백준, AC, 5430 (0) | 2024.08.14 |
백준, 제로, 10773 (0) | 2024.08.13 |
백준, 카드2, 2164 (0) | 2024.08.12 |