백준, 외계인의 기타 연주, 2841

2024. 8. 19. 12:30ETC/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