๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 2์ฃผ์ฐจ] 15787 ๊ธฐ์ฐจ๊ฐ€ ์–ด๋‘ ์„ ํ—ค์น˜๊ณ  ์€ํ•˜์ˆ˜๋ฅผ ์‹ค๋ฒ„2 - ์ž๋ฐ”(Java) / ๋น„ํŠธ๋งˆ์Šคํ‚น

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/15787

 

15787๋ฒˆ: ๊ธฐ์ฐจ๊ฐ€ ์–ด๋‘ ์„ ํ—ค์น˜๊ณ  ์€ํ•˜์ˆ˜๋ฅผ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์— ๊ธฐ์ฐจ์˜ ์ˆ˜ N(1 ≤ N ≤ 100000)๊ณผ ๋ช…๋ น์˜ ์ˆ˜ M(1 ≤ M ≤ 100000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ดํ›„ ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ M+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ๊ฐ ์ค„์— ๋ช…๋ น์ด ์ฃผ์–ด์ง„๋‹ค. 

www.acmicpc.net

๋”๋ณด๊ธฐ

๋ฌธ์ œ

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๋ฒˆ์งธ ์ค„๊นŒ์ง€ ๊ฐ ์ค„์— ๋ช…๋ น์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์€ํ•˜์ˆ˜๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ฐจ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ขŒ์„์˜ ์œ„์น˜๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ, ํŽธํ•œ ์ธ๋ฑ์Šค ์ ‘๊ทผ์„ ์œ„ํ•ด x๋ฒˆ์งธ ์ขŒ์„์€ (1<<x)๋กœ ํŒ๋ณ„ํ•œ๋‹ค.

 ์ฆ‰ 21๊ฐœ์˜ ์ž๋ฆฌ์ˆ˜์—์„œ 0๋ฒˆ์งธ(์ด์ง„์ˆ˜ ๋งจ ์˜ค๋ฅธ์ชฝ)์„ ๋ฒ„๋ฆฌ๊ณ  1๋ฒˆ์งธ๋ถ€ํ„ฐ 20๋ฒˆ์งธ๊นŒ์ง€ 20๊ฐœ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

 

 ์‚ฌ๋žŒ์„ ํŠน์ • ์œ„์น˜์— ํƒœ์šฐ๋Š”๊ฑด ๊ทธ ์œ„์น˜์—์„œ |์—ฐ์‚ฐ, ํŠน์ • ์œ„์น˜์—์„œ ๋‚ด๋ฆฌ๋Š”๊ฑด &์—ฐ์‚ฐ์„ ํ•˜๋ฉด ๋œ๋‹ค.

 ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๊ฐ€๊ฑฐ๋‚˜ ๋’ค๋กœ ๊ฐ€๋Š” ๊ฒƒ์€ ์‰ฌํ”„ํŠธ(<<, >>) ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 ๋ฌธ์ œ๋Š” ๋งจ ๋์— ์œ„์น˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด๋‹ค.   

 

โœ”๏ธ ๋’ค๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ

โ—ป๏ธ 21๋ฒˆ์งธ์— ์œ„์น˜ํ•œ ์‚ฌ๋žŒ์€ 22๋ฒˆ์งธ๋กœ ๋ฐ€๋ฆฌ๊ฒŒ ๋œ๋‹ค. 

โ—ป๏ธ (1<<21)์€ 1์„ 22๋ฒˆ์งธ ์ž๋ฆฌ๋กœ ๋ฏธ๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ 1์„ ๋บ€ (1<<21)-1์€ 1์ด 21๊ฐœ ๋ชจ์—ฌ์žˆ๋Š” ์ด์ง„์ˆ˜๊ฐ€ ๋œ๋‹ค.

โ—ป๏ธ ๋”ฐ๋ผ์„œ ๋‘ ์ด์ง„์ˆ˜๋ฅผ & ์ฒ˜๋ฆฌํ•˜๋ฉด, 22๋ฒˆ์งธ์— ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

 

โœ”๏ธ ์•ž์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ

โ—ป๏ธ 1๋ฒˆ์งธ์— ์žˆ๋˜ ์‚ฌ๋žŒ์€ ์ขŒ์„์œผ๋กœ ์น˜์ง€ ์•Š๋Š” 0๋ฒˆ์งธ๋กœ ๋ฐ€๋ฆฌ๊ฒŒ ๋œ๋‹ค.

โ—ป๏ธ ~1: 11111111111111111111111111111110 (32์ž๋ฆฌ)

โ—ป๏ธ ์•ž์œผ๋กœ ๋ฏผ ๋‹ค์Œ ~1๊ณผ &์—ฐ์‚ฐ์„ ํ•ด์ฃผ๋ฉด, ๊ณ„์‚ฐ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•˜๋Š” 0๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ์‚ฌ๋ผ์ง„๋‹ค.

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ๋น„ํŠธ๋งˆ์Šคํ‚น ๋‹ค์‹œ ํ•ด๋ณด์ž๊ณ  ๊ณ ๋ฅธ ๋ฌธ์ œ....์—ฌ์ „ํžˆ ์‹ซ๋‹ค. ์ปดํ“จํ„ฐ๊ณตํ•™์ด์ง€๋งŒ ์ˆ˜ํ•™์ด ์‹ซ์–ด์„œ ์–ด์ฉŒ์ง€.

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

/** https://www.acmicpc.net/problem/15787 */
public class Main_๋ฐฑ์ค€_15787_๊ธฐ์ฐจ๊ฐ€์–ด๋‘ ์„ํ—ค์น˜๊ณ ์€ํ•˜์ˆ˜๋ฅผ_์‹ค๋ฒ„2 {

	/*ss
	 ๋์ขŒ์„(1<<20)				์ฒซ์ขŒ์„(1<<1)
	 0 0 0 0 0 0 0 0 	....   0         0
	20๋ฒˆ์งธ 					1๋ฒˆ์งธ
	*/
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		int[] trains = new int[N+1];
		
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int op = Integer.parseInt(st.nextToken());
			int tNum = Integer.parseInt(st.nextToken());
			int sNum = 0;
			
			switch(op) {
			case 1: // ์‚ฌ๋žŒ์„ ํƒœ์šด๋‹ค
				sNum = Integer.parseInt(st.nextToken());
				trains[tNum] |= (1<<sNum);
				break;
			case 2: // ํ•˜์ฐจํ•œ๋‹ค
				sNum = Integer.parseInt(st.nextToken());
				trains[tNum] &= ~(1<<sNum);
				break;
			case 3: // ํ•œ์นธ์”ฉ ๋’ค๋กœ
				trains[tNum] <<= 1;
				//๋งจ ์™ผ์ชฝ(21๋ฒˆ์งธ) ๋น„ํŠธ๋ฅผ ์ง€์›Œ์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ
				//๋งจ ์™ผ์ชฝ์€ 0, 20๋ฒˆ์งธ~1๋ฒˆ์งธ๋Š” ๋ชจ๋‘ 1๋กœ ๋‘๊ณ  &์—ฐ์‚ฐ 
				trains[tNum] &= ((1<<21)-1);
				break;
			case 4: // ํ•œ์นธ์”ฉ ์•ž์œผ๋กœ
				trains[tNum] >>= 1;
				trains[tNum] &= ~1;
			}
		}
		
		Set<Integer> set = new HashSet<>();
		for (int i = 1; i <= N; i++) {
			set.add(trains[i]);
		}
		System.out.println(set.size());
	}//end of main
	
}//end of class

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ