https://www.acmicpc.net/problem/1966
1966๋ฒ: ํ๋ฆฐํฐ ํ
๋ฌธ์ ์ฌ๋ฌ๋ถ๋ ์๋ค์ํผ ์ฌ๋ฌ๋ถ์ ํ๋ฆฐํฐ ๊ธฐ๊ธฐ๋ ์ฌ๋ฌ๋ถ์ด ์ธ์ํ๊ณ ์ ํ๋ ๋ฌธ์๋ฅผ ์ธ์ ๋ช ๋ น์ ๋ฐ์ ‘์์๋๋ก’, ์ฆ ๋จผ์ ์์ฒญ๋ ๊ฒ์ ๋จผ์ ์ธ์ํ๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๊ฐ ์์ธ๋ค๋ฉด Queue ์๋ฃ๊ตฌ์กฐ์ ์์ฌ์ FIFO - First In First Out - ์ ๋ฐ๋ผ ์ธ์๊ฐ ๋๊ฒ ๋๋ค. ํ์ง๋ง ์๊ทผ์ด๋ ์๋ก์ด ํ๋ฆฐํฐ๊ธฐ ๋ด๋ถ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ์๋๋ฐ, ์ด ํ๋ฆฐํฐ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ธ์๋ฅผ ํ๊ฒ ๋๋ค. ํ์ฌ Queue์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์์ ‘์ค์๋’๋ฅผ
www.acmicpc.net
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(bf.readLine());
for(int t=0; t<tc; t++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken()); // ๋ฌธ์์ ์
int x = Integer.parseInt(st.nextToken()); // ๋ช๋ฒ์งธ๋ก ์ธ์๋์๋์ง ๊ถ๊ธํ ๋ฌธ์
int ans = 0;
st = new StringTokenizer(bf.readLine()); // ๋ฌธ์์ ์ค์๋
LinkedList<Integer> q = new LinkedList<Integer>();
for(int i=0; i<N; i++)
q.add(Integer.parseInt(st.nextToken())); // ํ์ ๋ฌธ์์ ์ค์๋ ์ถ๊ฐ
while(!q.isEmpty()) {
boolean flag = true; // ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ์๋์ง ์ฒดํฌ
for(int i=1; i<q.size(); i++) {
if(q.peek() < q.get(i)) { // ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒฝ์ฐ
flag = false;
break;
}
}
// ๋ฌธ์๋ด ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒ ์๋๊ฒฝ์ฐ
if(flag) {
ans ++; // ํ์ฌ ๋ชฉ๋ก ์ธ์ +1
q.poll(); // ํ์ฌ ๋ชฉ๋ก ์ธ์ํด์ ์ ๊ฑฐํ๊ธฐ
if(x == 0) break; // ํ์ฌ ์ธ์ํ๋ ค๋ ๋ฌธ์๊ฐ ๊ถ๊ธํ ๋ฌธ์์ธ๊ฒฝ์ฐ
else x --; // ํ์ฌ ์ธ์ํ๋ ค๋ ๋ฌธ์๊ฐ ๊ถ๊ธํ ๋ฌธ์๊ฐ ์๋๊ฒฝ์ฐ
}
// ๋ฌธ์๋ด ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒ ์๋๊ฒฝ์ฐ -> ํ์ฌ ๋ฌธ์ ๊ฐ์ฅ ๋ค๋ก ์ด๋
else {
// ํ์ฌ ๋ชฉ๋ก ์ ๊ฑฐ ํ ๋ง์ง๋ง์ ๋ฃ๊ธฐ
int temp = q.poll();
q.add(temp);
/*
* ํ์ฌ ๋ฌธ์๊ฐ ๊ถ๊ธํ ๋ฌธ์์ธ๊ฒฝ์ฐ -> ๊ฐ์ฅ ๋ค๋ก ์ด๋ํ๋ฏ๋ก Queue์ ์ฌ์ด์ฆ-1๋ก ์ธ๋ฑ์ค ์ง์
* ๊ถ๊ธํ์ง ์์ ๋ฌธ์์ธ๊ฒฝ์ฐ -> ์ธ๋ฑ์ค -1
*/
if(x == 0) x = q.size()-1;
else x -= 1;
}
}
System.out.println(ans);
}
bf.close();
}
}
ํ์ด
์ค์๋๊ฐ ๋์ผํ ๋ฌธ์๋ค์๊ฒฝ์ฐ, ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ํ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ฌ Queue์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์์ ‘์ค์๋’๋ฅผ ํ์ธํ๋ค.
- ๋๋จธ์ง ๋ฌธ์๋ค ์ค ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ์ด ๋ฌธ์๋ฅผ ์ธ์ํ์ง ์๊ณ Queue์ ๊ฐ์ฅ ๋ค์ ์ฌ๋ฐฐ์น ํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ก ์ธ์๋ฅผ ํ๋ค.
ํด๊ฒฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ฌ ๋ฌธ์๋์ ์ค์๋๋ฅผ ํ์ธํ๊ณ , ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒ ์๋์ง ์ฒดํฌํ๋ค.
- ๋ง์ฝ ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒ ์๋๊ฒฝ์ฐ(flag = true) - <ํ์ฌ ๋ฌธ์์ ์ค์๋๊ฐ ๊ฐ์ฅ ๋์๊ฒฝ์ฐ>
- - ํ์ฌ ๋ชฉ๋ก์ ์ธ์ํ์ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ํ์ฌ ์ธ์๋ฅผ ์ ๊ฑฐํ๋ค.
- - ๋ง์ฝ ํ์ฌ ๋ฌธ์๊ฐ ๋ด๊ฐ ๊ถ๊ธํดํ๋ ์ธ์์๊ฒฝ์ฐ while๋ฌธ์ ํ์ถํ๊ณ ,
- - ๋ง์ฝ ํ์ฌ ๋ฌธ์๊ฐ ๊ถ๊ธํดํ์ง ์๋ ์ธ์์๊ฒฝ์ฐ - ์ธ๋ฑ์ค๋ฅผ 1์ฉ ๊ฐ์ํ๋ค.(x--)
- ๋ง์ฝ ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์๊ฒ ์๋๊ฒฝ์ฐ(flag = false) - <ํ์ฌ ๋ฌธ์์ ์ซ์๊ฐ ๊ฐ์ฅ ๋์ง ์๋๊ฒฝ์ฐ>
- - ๋ง์ฝ ํ์ฌ ๋ฌธ์๊ฐ ๊ถ๊ธํดํ๋ ๋ฌธ์์ธ๊ฒฝ์ฐ -> ํ์ ๋ง์ง๋ง์ ๋ฃ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ size-1๋ก ์ค์ ํ๋ค.
- -- (๋ฐฐ์ด๊ณผ ๋์ผํ๊ฒ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก, size-1๋ก ์ค์ ํ๋ค.)
- - ๋ง์ฝ ํ์ฌ ๋ฌธ์๊ฐ ๊ถ๊ธํ์ง ์์ ๋ฌธ์์ธ๊ฒฝ์ฐ -> ์ธ๋ฑ์ค๋ฅผ 1์ฉ ๊ฐ์ํ๋ค.(x--)
- - ๊ทธ ํ ํ์ฌ ๋ฌธ์๋ฅผ ์ ๊ฑฐ(poll()) ํ ๋ง์ง๋ง์ ์ฝ์ (add())ํ๋ค.
ํ์ฌ ๋ชฉ๋ก์ ์ธ์ํด์ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ํ์ฌ ์ธ์๋ฅผ ์ ๊ฑฐํ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ๊ด๋ จ ๋ฉด์ ์ค๋น 1 (2) | 2020.03.26 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)์ ๋ง๋๊ธฐ(์คํ/ํ) (0) | 2020.03.25 |
[Codeforces] 1191A: Tokitsukaze and Enhancement (0) | 2020.03.24 |
[๋ฐฑ์ค] 13904๋ฒ: ๊ณผ์ (๊ทธ๋ฆฌ๋) (0) | 2020.03.22 |
[Codeforces] 1300A: Non-zero (0) | 2020.03.21 |
๋๊ธ