-
2872 우리집엔 도서관이 있어백준/그리디 알고리즘 2022. 5. 2. 20:01
1. 문제 풀이법
<예시1>
35421
이때 책 번호 5,4,3,2,1 순서로 생각해보면 된다.
자세히 살펴보자.
책을 빼서 맨 위에 올려 놓을 떄마다 count 를 증가시켜 보자.
1) 5는 그냥 그 자리에 두면 된다.
2) 4는 5 뒤에 있기 때문에 책을 빼서 맨 위에 올려 놓아야 한다.
=> 43521
count = 1
3) 3은 4뒤에 있기 때문에 책을 빼서 맨 위에 올려 놓아야 한다.
=> 34521
count = 2
4) 2도 마찬가지이다.
=> 23451
count = 3
5) 1도 마찬가지이다.
=> 12345
count = 4
최종 답은 4가 된다.
그러면 생각해보자.
35421에서,
5뒤에 있는 4,2,1은 모두 그 자리에서 빼서 맨 위에 올려 놓았다.
5앞에 있던 3 역시 이동이 있었다.
2)에서 4를 맨 위로 올린(43521)다음
3)에서 3을 4위로 올렸다. (34521)
그런데 생각해보자.
만약 5 앞에 4가 있었다면 어땠을까?
<예시2>
34521
5뒤에 있는 2,1은 당연히 위로 올려야 된다.
그런데 5 앞에 있는 3,4는 이미 정렬된 상태이기 때문에 그냥 둬도 된다.
이런 풀이를 코드에서 볼 수 있다.
우선 입력값을 book 배열에 넣는다.
처음에 max = N = 5 이다.
그리고 책을 올릴 때마다 result 를 1씩 증가시킨다.
1) book[4] =1 로 max 값인 5가 아니다.
=> result를 증가시킨다. (책을 맨 위로 올림)
result = 1
2) book[3] = 2 도 max 와 다르다.
=> result = 2
3) book[2] = 5는 max 값과 같다. 그래서 그냥 그 자리에 둬도 된다.
=> max = 4 가 된다. (max 값을 1줄인다.)
4) book[1] = 4도 max 값과 같다. 그냥 둔다.
=> max = 3
5) book[0] = 3 으로, max 값과 같다. 그냥 둔다.
그래서 최종 result =2 이다.
즉, 책을 2번만 이동시키면 된다.
맨 처음 설명한 <예시1>도 코드로 다시 살펴보자.
<예시1>
35421
맨 처음 max = 5 이다.
1) book[4] =1 로 max 값과 다르므로 result = 1
2) book[3] = 2로 max 값과 다르므로 result = 2
3) book[2] = 4 로 max 값과 다르므로 result = 3
4) book[1] = 5 로 max 값과 같으므로 그냥 둔다. max = 4가 된다.
5) book[0] = 3 으로 max 값과 다르므로 result = 4
최종 4번 책을 이동시키면 된다.
2. 최종 코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int book [] = new int[N]; for(int i=0; i<N; i++) { book[i] = Integer.parseInt(br.readLine()); } int max = N; int result = 0; for(int i=N-1; i>=0; i--) { if(book[i] == max) { max--; }else { result++; } } System.out.println(result); } }
참고 블로그 :
https://comengin.tistory.com/350
백준 2872
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main2872 { public static void main(String[] args) throws IOException { BufferedReader br = n..
comengin.tistory.com
'백준 > 그리디 알고리즘' 카테고리의 다른 글
1781 컵라면 (0) 2024.07.05 12904 A와 B (0) 2022.05.02 2839 설탕 배달 (0) 2022.03.10 2437 저울(자바) (0) 2022.02.19 1439 뒤집기 (0) 2022.02.10