2018. 6. 13. 11:15, 알고리즘/BOJ
https://www.acmicpc.net/problem/6198
O(N**2) 풀이를 떠올릴 수 있지만 시간초과가 뜰 가능성이 농후합니다. 대신 현재까지 등장한 길이 중에서 strictly decreasing하는 sequence만 모아둔 stack(혹은 배열)을 생각해봅시다. 새로운 원소가 들어왔을 때 여전히 이 stack을 strictly decreasing하게 처리를 하고 나면 stack의 size가 곧 새로 들어온 원소의 hair를 볼 수 있는 소의 수입니다.
예를 들어 예제 입력인 10 3 7 4 12 2로 생각해보면
10이 들어왔을 때 -> 10 (+0)
3이 들어왔을 때 -> 10 3 (+1)
7이 들어왔을 때 -> 10 7 (+1)
4가 들어왔을 때 -> 10 7 4 (+2)
12가 들어왔을 떄 -> 12
2가 들어왔을 때 -> 12 2 (+1)
입니다.
각 원소는 반드시 한 번 stack에 등장하고, 한 번 혹은 0번 제거됨이 보장되므로 O(N)에 해결이 가능합니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1138번: 한 줄로 서기 (0) | 2018.06.15 |
---|---|
[BOJ] 1722번: 순열의 순서 (0) | 2018.06.14 |
[BOJ] 13325번: Binary Tree (0) | 2018.06.13 |
[BOJ] 3038번: JOGURT (4) | 2018.06.13 |
[BOJ] 11387번: 님 무기가 좀 나쁘시네여 (0) | 2018.06.05 |
[BOJ] 15226번: House of Cards (0) | 2018.06.05 |
Comments