[Silver II] ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ - 15787
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 230548 KB, ์๊ฐ: 1304 ms
๋ถ๋ฅ
๋นํธ๋ง์คํน, ๊ตฌํ
๋ฌธ์ ์ค๋ช
N๊ฐ์ ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ ๊ฑด๋๋ ค๊ณ ํ๋ค.
๊ธฐ์ฐจ๋ 20๊ฐ์ ์ผ๋ ฌ๋ก ๋ ์ข์์ด ์๊ณ , ํ ๊ฐ์ ์ข์์๋ ํ ๋ช ์ ์ฌ๋์ด ํ ์ ์๋ค.
๊ธฐ์ฐจ์ ๋ฒํธ๋ฅผ 1๋ฒ๋ถํฐ N๋ฒ์ผ๋ก ๋งค๊ธธ ๋, ์ด๋ ํ ๊ธฐ์ฐจ์ ๋ํ์ฌ M๊ฐ์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋ค.
๋ช ๋ น์ ์ข ๋ฅ๋ 4๊ฐ์ง๋ก ๋ค์๊ณผ ๊ฐ๋ค.
- 1 i x : i๋ฒ์งธ ๊ธฐ์ฐจ์(1 โค i โค N) x๋ฒ์งธ ์ข์์(1 โค x โค 20) ์ฌ๋์ ํ์๋ผ. ์ด๋ฏธ ์ฌ๋์ด ํ์๋ค๋ฉด , ์๋ฌด๋ฐ ํ๋์ ํ์ง ์๋๋ค.
- 2 i x : i๋ฒ์งธ ๊ธฐ์ฐจ์ x๋ฒ์งธ ์ข์์ ์์ ์ฌ๋์ ํ์ฐจํ๋ค. ๋ง์ฝ ์๋ฌด๋ ๊ทธ์๋ฆฌ์ ์์์์ง ์์๋ค๋ฉด, ์๋ฌด๋ฐ ํ๋์ ํ์ง ์๋๋ค.
- 3 i : i๋ฒ์งธ ๊ธฐ์ฐจ์ ์์์๋ ์น๊ฐ๋ค์ด ๋ชจ๋ ํ์นธ์ฉ ๋ค๋ก๊ฐ๋ค. k๋ฒ์งธ ์์ ์ฌ๋์ k+1๋ฒ์งธ๋ก ์ด๋ํ์ฌ ์๋๋ค. ๋ง์ฝ 20๋ฒ์งธ ์๋ฆฌ์ ์ฌ๋์ด ์์์์๋ค๋ฉด ๊ทธ ์ฌ๋์ ์ด ๋ช ๋ น ํ์ ํ์ฐจํ๋ค.
- 4 i : i๋ฒ์งธ ๊ธฐ์ฐจ์ ์์์๋ ์น๊ฐ๋ค์ด ๋ชจ๋ ํ์นธ์ฉ ์์ผ๋ก๊ฐ๋ค. k๋ฒ์งธ ์์ ์ฌ๋์ k-1 ๋ฒ์งธ ์๋ฆฌ๋ก ์ด๋ํ์ฌ ์๋๋ค. ๋ง์ฝ 1๋ฒ์งธ ์๋ฆฌ์ ์ฌ๋์ด ์์์์๋ค๋ฉด ๊ทธ ์ฌ๋์ ์ด ๋ช ๋ น ํ์ ํ์ฐจํ๋ค.
M๋ฒ์ ๋ช ๋ น ํ์ 1๋ฒ์งธ ๊ธฐ์ฐจ๋ถํฐ ์์๋๋ก ํ ๊ธฐ์ฐจ์ฉ ์ํ์๋ฅผ ๊ฑด๋๋๋ฐ ์กฐ๊ฑด์ด ์๋ค.
๊ธฐ์ฐจ๋ ์์๋๋ก ์ง๋๊ฐ๋ฉฐ ๊ธฐ์ฐจ๊ฐ ์ง๋๊ฐ ๋ ์น๊ฐ์ด ์์ ์ํ๋ฅผ ๋ชฉ๋ก์ ๊ธฐ๋กํ๋ฉฐ ์ด๋ฏธ ๋ชฉ๋ก์ ์กด์ฌํ๋ ๊ธฐ๋ก์ด๋ผ๋ฉด ํด๋น ๊ธฐ์ฐจ๋ ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด, ๋ค์ ๊ทธ๋ฆผ์ ์๋ก ๋ค์์ ๋, 1๋ฒ์งธ ๊ธฐ์ฐจ์ ๊ฐ์ด ์น๊ฐ์ด ์์ ์ํ๋ ๊ธฐ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ํ์๋ฅผ ๊ฑด๋ ์์๋ค. 2๋ฒ์งธ ๊ธฐ์ฐจ์ ๊ฐ์ ์ํ๋ ๊ธฐ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ 2๋ฒ์งธ ๊ธฐ์ฐจ๋ ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค. 3๋ฒ์งธ ๊ธฐ์ฐจ๋ 1๋ฒ์งธ ๊ธฐ์ฐจ์ ์น๊ฐ์ด ์์ ์ํ๊ฐ ๊ฐ์ผ๋ฏ๋ก ์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ค.
์ฒ์์ ์ฃผ์ด์ง๋ ๊ธฐ์ฐจ์๋ ์๋ฌด๋ ์ฌ๋์ด ํ์ง ์๋๋ค.
์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ ๊ธฐ์ฐจ์ ์๋ฅผ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ์งธ ์ค์ ๊ธฐ์ฐจ์ ์ N(1 โค N โค 100000)๊ณผ ๋ช ๋ น์ ์ M(1 โค M โค 100000)๊ฐ ์ฃผ์ด์ง๋ค. ์ดํ ๋ ๋ฒ์งธ ์ค๋ถํฐ M+1๋ฒ์งธ ์ค๊น์ง ๊ฐ ์ค์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ํ์๋ฅผ ๊ฑด๋ ์ ์๋ ๊ธฐ์ฐจ์ ์๋ฅผ ์ถ๋ ฅํ์์ค.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] trains = new int[n][20];
for (int i = 0; i < m; i++) {
int command = sc.nextInt();
int trainIndex = sc.nextInt() - 1;
if (command == 1) { // ํ์น
int seatPosition = sc.nextInt() - 1;
trains[trainIndex][seatPosition] = 1;
}
if (command == 2) { // ํ์ฐจ
int seatPosition = sc.nextInt() - 1;
trains[trainIndex][seatPosition] = 0;
}
if (command == 3) { // ๋ค๋ก ํ์นธ์ฉ
System.arraycopy(trains[trainIndex], 0, trains[trainIndex], 1, trains[trainIndex].length - 1);
trains[trainIndex][0] = 0;
}
if (command == 4) { // ์์ผ๋ก ํ์นธ์ฉ
System.arraycopy(trains[trainIndex], 1, trains[trainIndex], 0, trains[trainIndex].length - 1);
trains[trainIndex][trains[trainIndex].length - 1] = 0;
}
}
Set<String> uniqueTrains = new HashSet<>();
for (int[] train : trains) {
uniqueTrains.add(Arrays.toString(train));
}
System.out.println(uniqueTrains.size());
}
}