๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ด๋ก 

๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•œ ์ˆœ์—ด, ์กฐํ•ฉ

by Edlin 2022. 5. 17.

๋น„ํŠธ

  • 0 = false = ์‚ฌ์šฉ ์ค‘ X
  • 1 = true = ์‚ฌ์šฉ ์ค‘ O

๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • & : AND ์—ฐ์‚ฐ
  • | : OR ์—ฐ์‚ฐ
  • ^ : XOR ์—ฐ์‚ฐ (๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1)
  • ~ : ๋ชจ๋“  ๋น„ํŠธ ๋ฐ˜์ „
  • << : ๋น„ํŠธ ์—ด์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ (๋นˆ ๊ณต๊ฐ„์€ 0์œผ๋กœ ์ฑ„์šด๋‹ค)
  • >> : ๋น„ํŠธ ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ (๋นˆ ๊ณต๊ฐ„์€ ๋ถ€ํ˜ธ๋น„ํŠธ๋กœ ์ฑ„์šด๋‹ค)
  • >>> : ๋น„ํŠธ ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ (๋นˆ ๊ณต๊ฐ„์€ 0์œผ๋กœ ์ฑ„์šด๋‹ค)
&’์€ ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ์ค‘์ธ์ง€, ‘|’์€ ํ•ด๋‹น ์ˆซ์ž๋ฅผ ์‚ฌ์šฉ ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ


1. ์ˆœ์—ด ์ฝ”๋“œ - ๋น„ํŠธ ๋งˆ์Šคํ‚น ์‚ฌ์šฉ

import java.util.Arrays;

public class Permutation_BitMasking {

	static int R, N, nums[], set[];

	public static void main(String[] args) {

//		nPr
		R = 2;
		N = 5;
		nums = new int[] { 1, 2, 3, 4, 5 };
		set = new int[R]; // ์ˆœ์—ด์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ์˜ ์ง‘ํ•ฉ

		permutation(0, 0);
	}

	private static void permutation(int L, int flag) { // L: N๊ฐœ์˜ ์ˆซ์ž ์ค‘ ๋ฝ‘์€ ๊ฐœ์ˆ˜
		if (L == R) {
			System.out.println(Arrays.toString(set));
			return;
		}

		for (int i = 0; i < N; i++) {
			
			// ํ•ด๋‹น ์œ„์น˜์˜ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธ
			**if ((flag & 1 << i) != 0)**
				continue;

			set[L] = nums[i]; // ํ•ด๋‹น ์œ„์น˜ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์œผ๋ฉด ์ง‘ํ•ฉ์— ๋„ฃ๊ธฐ
			
			// ๋‹ค์Œ ์ˆ˜ ๋ฝ‘์œผ๋Ÿฌ ๊ฐ€๊ธฐ 
			**permutation(L + 1, flag | 1 << i);** // i๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ƒํƒœ์ž„์„ ์„ธํŒ…
		}
	}
}

2. ์กฐํ•ฉ ์ฝ”๋“œ - ๋น„ํŠธ๋งˆ์Šคํ‚น ์‚ฌ์šฉ

package study12_Binary;

import java.util.Arrays;

public class Permutation_BitMasking {

	static int R, N, nums[], set[];

	public static void main(String[] args) {

//		nCr
		R = 2;
		N = 5;
		nums = new int[] { 1, 2, 3, 4, 5 };
		set = new int[R]; // ์กฐํ•ฉ์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ์˜ ์ง‘ํ•ฉ

		combination(0, 0, 0);
	}

	private static void combination(int L, int start, int flag) { // L: N๊ฐœ์˜ ์ˆซ์ž ์ค‘ ๋ฝ‘์€ ๊ฐœ์ˆ˜
		if (L == R) {
			System.out.println(Arrays.toString(set));
			return;
		}

		for (int i = start; i < N; i++) {

			// ํ•ด๋‹น ์œ„์น˜์˜ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธ
			if ((flag & 1 << i) != 0)
				continue;

			set[L] = nums[i]; // ํ•ด๋‹น ์œ„์น˜ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์œผ๋ฉด ์ง‘ํ•ฉ์— ๋„ฃ๊ธฐ

			// ๋‹ค์Œ ์ˆ˜ ๋ฝ‘์œผ๋Ÿฌ ๊ฐ€๊ธฐ
			combination(L + 1, i + 1, flag | 1 << i); // i๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์‚ฌ์šฉ ์ƒํƒœ์ž„์„ ์„ธํŒ…
		}
	}
}

'Algorithm > ์ด๋ก ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Next Permutation์„ ์ด์šฉํ•œ ์ˆœ์—ด  (0) 2022.05.17
Next Permutation์„ ์ด์šฉํ•œ ์กฐํ•ฉ  (0) 2022.05.17

๋Œ“๊ธ€