ALGORITHM ๐Ÿค–/Baekjoon

๋ฐฑ์ค€ - 15787

daxx0ne 2023. 5. 19. 14:10

[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());
    }
}