์†Œ๋ฌธ๋‚œ ์น ๊ณต์ฃผ

๊ณจ๋“œ3

๋ฌธ์ œ ์ดํ•ด

  • 5x5์˜ ๊ทธ๋ฆฌ๋“œ๋กœ ์ฃผ์–ด์ง€๋Š” 25๊ฐœ ๊ธ€์ž์— ๋Œ€ํ•ด
  • 7๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์กฐํ•ฉ์„ ๋งŒ๋“œ๋Š”๋ฐ
      1. 7๊ฐœ์˜ ๊ธ€์ž๋Š” ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค
      1. S๊ฐ€ ์ผ๊ณฑ ๊ธ€์ž ์ค‘ 4๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค
  • ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๋ชจ๋“  ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค

์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ ๋ฌด์กฐ๊ฑด 25๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„ ๋ฉด์—์„œ ๋„๋„ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณ ์•ˆ

1. ์ขŒํ‘œ (y, x)์™€ ๊ธ€์ž (S or Y)๋ฅผ ๋‹ด์„ Node ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค

์ž…๋ ฅ์„ ๊ทธ๋Œ€๋กœ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ขŒํ‘œ ๊ฐ’๊ณผ ๊ธ€์ž๋ฅผ ํ•„๋“œ๋กœ ๊ฐ–๋Š” ๋…ธ๋“œ ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐ›๋Š”๋‹ค. ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ์—์„œ .get(int idx) ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ผ์ด ์žฆ์„ ๊ฒƒ ๊ฐ™์•„ ArrayList<Node>๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

static class Node {
	int y, x;
    char val;
	Node(int y, int x, char val) {
		this.y = y;
		this.x = x;
		this.val = val;
    }

	@Override
	public String toString() {
		return "(" + y + ","+x+")=> "+val+"\t";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + y;
		result = prime * result + x;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;
		if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
		Node other = (Node) obj;
		if (y != other.y) return false;
		if (x != other.x) return false;
		return true;
	}
}

equals์™€ hashCode๋Š” ๋‹ค์Œ ์„น์…˜์—์„œ 7๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ์œ„ํ•ด ๊ตฌํ˜„ํ•ด๋’€๋‹ค.

์ด ์กฐ๊ฑด์€ ๊ธ€์ž์˜ ๊ฐ’๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ๋งŒ์กฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— equals์™€ hashCode ๋ฉ”์„œ๋“œ ๋˜ํ•œ ๊ธ€์ž์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ–ˆ๋‹ค.

2. ๋…ธ๋“œ 7๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์กฐํ•ฉ์„ ๋งŒ๋“ ๋‹ค

 private static void makeCombinations(ArrayList<Node> students, int depth, int start, boolean[] visited, Node[] result) {
	if (depth == 7) {
		if (satisfiesCondition(result)) count++;
        return;
    }
    for (int i = start; i < students.size(); i++) {
        if (!visited[i]) {
			result[depth] = students.get(i);
			visited[i] = true;
			makeCombinations(students, depth+1, i+1, visited, result);
			visited[i] = false;
		}
	}
}

3. S๊ฐ€ 4๊ฐœ ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค

private static boolean satisfiesCondition(Node[] result) {
	int sCount = 0;
	for (int i = 0; i < 7; i++) {
		if (result[i].val == 'S') sCount++;
	}
	if (sCount < 4) return false;
    return isConnected(result);
}

์šฐ์„  ์กฐํ•ฉ์˜ ๊ธ€์ž ์ค‘ 4๊ฐœ ์ด์ƒ์ด S์ธ์ง€ ํ™•์ธํ•œ ๋‹ค์Œ, ์กฐํ•ฉ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

4. ์กฐํ•ฉ์˜ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค

private static boolean isConnected(Node[] result) {
	int[] dy = {-1, 1, 0, 0};
    int[] dx = {0, 0, -1, 1};

    Set<Node> nodes = new HashSet<>(List.of(result));
    ArrayDeque<Node> queue = new ArrayDeque<>();
    Set<Node> visited = new HashSet<>();
    
    queue.addLast(result[0]);
    visited.add(result[0]);

    while (!stack.isEmpty()) {
        Node curr = queue.pollFirst();
        int y = curr.y;
        int x = curr.x;

        for (int i = 0; i < 4; i++) {
            int ny = y + dy[i];
            int nx = x + dx[i];

            Node n = new Node(ny, nx, '0');
			if (nodes.contains(n) && !visited.contains(n)) {
				queue.addLast(n);
				visited.add(n);
			}
		}
	}
	return visited.size() == nodes.size();
}

์กฐํ•ฉ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” BFS๋กœ ํ™•์ธํ–ˆ๋‹ค.

ArrayDeque<Node> queue๋Š” BFS๋ฅผ ์œ„ํ•œ ํ๋กœ ์‚ฌ์šฉํ–ˆ๊ณ , Set<Node> visited๋Š” ๋ฐฉ๋ฌธ๋œ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋‹ค.

int[] dy์™€ int[] dx์— ๋Œ€ํ•œ ๋ฃจํ”„๋กœ ์‚ฌ๋ฐฉํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ณ , ์กฐํ•ฉ์˜ ๋…ธ๋“œ์™€ ์ผ์น˜ (์ขŒํ‘œ ๊ฐ’์— ๋Œ€ํ•ด)ํ•œ๋‹ค๋ฉด ๋ฐฉ๋ฌธ ๋…ธ๋“œ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•œ๋‹ค.

BFS๊ฐ€ ๋๋‚˜๊ณ  ๋‚˜์„œ๋Š” ์กฐํ•ฉ์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋˜์—ˆ๋Š”์ง€, ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ฆฌํ„ดํ•œ๋‹ค

5. ๋งŒ์กฑ์‹œํ‚ฌ ๊ฒฝ์šฐ ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค

3๋ฒˆ๊ณผ 4๋ฒˆ์˜ ์กฐ๊ฑด์ด ๋ชจ๋‘ ๋งŒ์กฑ๋œ ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋Š” static int count ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

ํ’€์ด ์ฝ”๋“œ

์†Œ๋ฌธ๋‚œ ์น ๊ณต์ฃผ ๋ฐฑ์ค€#1941 ํ’€์ด ์ฝ”๋“œ

์‚ฝ์งˆ

์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ค์„œ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ๋˜๊ฒŒ ์กฐ๊ธˆ ์•„์‰ฌ์›€์œผ๋กœ ๋‚จ๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€์ฒด๋กœ ํ‘ธ๋Š” ์žฌ๋ฏธ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.


์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ #1759

๊ณจ๋“œ5

๋ฌธ์ œ ์ดํ•ด

  • C ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ
  • ๋‹ค์Œ ์กฐ๊ฑด๋“ค์„ ๋งŒ์กฑ ์‹œํ‚ค๋Š” ์กฐํ•ฉ์„ ๋ชจ๋‘ ๊ตฌํ•ด๋ผ
    • L๊ฐœ์˜ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ๋‹ค
    • ์ตœ์†Œ 1๊ฐœ์˜ ๋ชจ์Œ (a, e, i, o, u)๋ฅผ ํฌํ•จํ•œ๋‹ค
    • ์ตœ์ˆ˜ 2๊ฐœ์˜ ์ž์Œ์„ ํฌํ•จํ•œ๋‹ค
    • ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค

์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅธ ์ˆœ์—ด์„ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ ์กฐํ•ฉ์ด๋ผ ๊ฒฐ์ •ํ–ˆ๋‹ค. ๋˜ํ•œ, L๊ณผ C์˜ ์ตœ๋Œ“๊ฐ’์ด 15๋กœ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์กฐํ•ฉ์„ ํ•ด๋ณด๊ธฐ ๋”ฑ ์ข‹์€ ํฌ๊ธฐ๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณ ์•ˆ

1. ์•ŒํŒŒ๋ฒณ์„ ์ •๋ ฌํ•œ๋‹ค.

Arrays.sort(characters);
makeCombinations(characters, new char[L], 0, 0,L, new boolean[C]);

์•ŒํŒŒ๋ฒณ์„ ์ •๋ ฌํ•ด์•ผ์ง€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ์•”ํ˜ธ๋งŒ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

2. C๊ฐœ์— ๋Œ€ํ•˜์—ฌ L๊ฐœ ๊ณ ๋ฅด๋Š” ์กฐํ•ฉ์„ ์ƒ์„ฑํ•œ๋‹ค

private static void makeCombinations(char[] characters, char[] result, int depth, int start, int L, boolean[] visited) {
	if (depth==L) {
		if (satisfiesCondition(result)) sb.append(arrToString(result)).append("\n");
        return;
    }
	for (int i = start; i < characters.length; i++) {
		if (!visited[i]) {
			visited[i] = true;
			result[depth] = characters[i];
			makeCombinations(characters, result, depth + 1, i+1, L, visited);
			visited[i] = false;
		}
	}
}

์กฐํ•ฉ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ int start๋ฅผ ํฌํ•จํ•ด์„œ ๋งค๋ฒˆ ๊ณ ๋ฅด๋Š” ์•ŒํŒŒ๋ฒณ ๋‹ค์Œ ์ˆœ์„œ๋ถ€ํ„ฐ ์•ŒํŒŒ๋ฒณ์„ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž์—ฐ์Šค๋ ˆ ์˜ค๋ฆ„์ฐจ์ˆœ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

2. (์กฐ๊ฑด 1) ์ตœ์†Œ 1๊ฐœ์˜ ๋ชจ์Œ์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค, (์กฐ๊ฑด 2) ์ตœ์†Œ 2๊ฐœ์˜ ์ž์Œ์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค

private static boolean satisfiesCondition(char[] result) {
	int vowels = 0, consonants = 0;
	for (char c : result) {
		switch (c) {
			case 'a':
			case 'e':
			case 'i':
			case 'o': 
			case 'u':
				vowels++;
				break;
			default:
				consonants++;
		}
	}
	return vowels >= 1 && consonants >= 2;
}

ํ’€์ด ์ฝ”๋“œ

์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ ๋ฐฑ์ค€#1759

์‚ฝ์งˆ

์‚ฌ์‹ค ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์˜€๋Š”๋ฐ ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ์•ˆ ์ฝ์–ด์„œ ์‹ค์ˆ˜ํ–ˆ๋‹ค


ํŠธ๋Ÿญ ๋ฐฑ์ค€#13335

์‹ค๋ฒ„1

๋ฌธ์ œ ์ดํ•ด

  • ๊ธธ์ด๊ฐ€ w์ด๊ณ , ์ตœ๋Œ€ ํ•˜์ค‘์ด L์ธ ๋‹ค๋ฆฌ๋ฅผ n๊ฐœ์˜ ํŠธ๋Ÿญ์ด ๊ฑด๋„ˆ๊ณ ์ž ํ•œ๋‹ค.
  • ๋‹ค๋ฆฌ ์œ„์˜ ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ ์ดํ•ฉ์€ ํ•ญ์ƒ ์ตœ๋Œ€ ํ•˜์ค‘ ์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค
  • ์›€์ง์ด๋Š” ๊ฐ ํŠธ๋Ÿญ์€ 1์ดˆ์— 1๋งŒํผ ์ „์ง„ํ•œ๋‹ค
  • ํŠธ๋Ÿญ์€ ์ˆœ์„œ๋Œ€๋กœ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณ ์•ˆ

1. ํ ์‚ฌ์šฉ

์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ ์ธ๋ฑ์Šค๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ํŠธ๋Ÿญ๋“ค์€ ๊ทธ์ € ์•ž ์ˆœ์„œ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋ฉด ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค

์ด ํžŒํŠธ๋กœ ํ๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ํŠธ๋Ÿญ์„ ๋ชจ๋‘ ํ์— ๋‹ด์•„๋‘๊ณ , ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ํŠธ๋Ÿญ๋“ค์€ ํ์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ๋œ๋‹ค. ํŠธ๋Ÿญ์„ ๋‹ด์€ ํ๊ฐ€ ๋น„์—ˆ์œผ๋ฉด ํŠธ๋Ÿญ๋“ค์ด ๋ชจ๋‘ ๊ฑด๋„œ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

2. ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„œ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

๊ทธ๋Ÿผ ํŠธ๋Ÿญ์ด ๊ฑด๋„œ๋Š”์ง€๋Š” ์–ด๋–ป๊ฒŒ ํ™•์ธํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, key ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜๋Š” TreeMap์— ๋‹ด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

๋‹ค๋ฆฌ์— ์ž…์žฅํ•œ ์‹œ๊ฐ„์„ key๋กœ, ํŠธ๋Ÿญ ๋ฌด๊ฒŒ๋ฅผ value๋กœ ๊ฐ–๋Š” pair๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…์žฅํ•˜๊ณ  ์ง€๋‚œ ์‹œ๊ฐ„์ด ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ๊ธด์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. true๋ฉด TreeMap์—์„œ ํ•ด๋‹น entry๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ์—์„œ๋„ ํ•ด๋‹น ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ์„œ ์—…๋ฐ์ดํŠธํ•œ๋‹ค

3. ๋‹ค์Œ ํŠธ๋Ÿญ ์ž…์žฅ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ

ํ˜„์žฌ ๋ฌด๊ฒŒ ์ดํ•ฉ์— ๋‹ค์Œ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋”ํ•ด๋„ ์ตœ๋Œ€ ํ•˜์ค‘์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š์œผ๋ฉด ํŠธ๋Ÿญ์ด ์ž…์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž…์žฅ์€ ํŠธ๋Ÿญ ํ์—์„œ ํ•ด๋‹น ํŠธ๋Ÿญ์„ pollFirstํ•˜๊ณ , ์‹œ๊ฐ„์„ ๊ด€๋ฆฌํ•˜๋Š” TreeMap์— ์ž…์žฅ์„ (time, weight)์œผ๋กœ ๊ธฐ๋กํ•˜๋ฉด ๋œ๋‹ค

ํ’€์ด ์ฝ”๋“œ

ํŠธ๋Ÿญ ๋ฐฑ์ค€#13335 ์ฝ”๋“œ

๋ฐฐ์šด ์ 

์ตœ๋Œ€ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ ‘๊ทผ์„ ์šฐ์„ ์‹œํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์‹œ๊ธˆ ์ƒ๊ฐํ–ˆ๋‹ค. ํ™•์‹คํžˆ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ฅ˜๋„ ์ž˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ๋ฃจํ”„ ์•ˆ์— ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋” ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ฏผํ•ด์•ผ๊ฒ ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋‹ค๋ฆฌ๋ฅผ ๋‹ค ๊ฑด๋„Œ ํŠธ๋Ÿญ์ด ๋‚˜๊ฐ๊ณผ ๋™์‹œ์— ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฃจํ”„ ๋‚ด์—์„œ ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ณ  ๋‚˜์„œ ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„œ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ์ €์งˆ๋ €๋‹ค.


์ถ”์–ต์˜ 2048๊ฒŒ์ž„ SWEA#6109

D4

๋ฌธ์ œ ์ดํ•ด

  • NxN ๊ทธ๋ฆฌ๋“œ์— 0 ๋˜๋Š” 2^k ๊ฐ’์˜ ์ˆซ์ž๋“ค์ด ์ฃผ์–ด์ง„๋‹ค
  • right, left, up, down์„ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด ๊ทธ๋ฆฌ๋“œ์˜ ์…€๋“ค์ด ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€๋ฆฐ๋‹ค
    • ์–ด๋–ค ํƒ€์ผ์ด ๋ฐ€๋ฆฌ๋Š” ๋ฐฉํ–ฅ์— ๋‹ค๋ฅธ ํƒ€์ผ์ด ์žˆ๊ณ , ๋‘ ํƒ€์ผ์— ์ ํžŒ ์ˆซ์ž ๊ฐ™๋‹ค๋ฉด ๋‘ ํƒ€์ผ์€ ํ•ฉ์ณ์ ธ ๋‘ ์ˆซ์ž์˜ ํ•ฉ์ด ์ ํžŒ ํ•˜๋‚˜์˜ ํƒ€์ผ์ด ๋œ๋‹ค
    • ๋ฒฝ์—์„œ ๊ฐ€๊นŒ์šด ์ˆซ์ž๋“ค๋ถ€ํ„ฐ ํ•ฉ์ณ์ง„๋‹ค
    • ์ด๋ฏธ ํ•ฉ์ณ์ง„ ์…€์€ ๋˜ ํ•ฉ์ณ์งˆ ์ˆ˜ ์—†๋‹ค
    • ์›๋ž˜ 0์ด์˜€๊ฑฐ๋‚˜, ์…€๋“ค์ด ๋ฐ€์–ด์ง€๋ฉด์„œ ๋นˆ ์…€๋“ค์€ ์ด๋™ ๋ฐฉํ–ฅ ๋ฐ˜๋Œ€์ชฝ ๋์— 0 ํƒ€์ผ๋กœ ์กด์žฌํ•œ๋‹ค

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณ ์•ˆ

1. ๊ทธ๋ฆฌ๋“œ๋ฅผ rotateํ•ด์„œ ๋ฌด์กฐ๊ฑด ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€๋ฆฌ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค

๋‚˜๋Š” ์™ผ์ชฝ์œผ๋กœ ๋ฐ€๋ฆฌ๋Š” ์ƒํ™ฉ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋จธ์ง€ (์˜ค๋ฅธ์ชฝ, ์œ—์ชฝ, ์•„๋žซ์ชฝ) ๋ฐ€๋ฆฌ๋Š” ์ƒํ™ฉ์€ rotate90 ํ•จ์ˆ˜๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค

์ด๋™ ๋ฐฉํ–ฅ์ด up์ด๋ฉด rotate90์„ 3๋ฒˆํ•ด์„œ ์™ผ์ชฝ์œผ๋กœ ๋ฏธ๋Š” ์ƒํ™ฉ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ rotate90์„ 1๋ฒˆ ํ•ด์„œ ๋ฐฉํ–ฅ์„ ์›์ƒ๋ณต๊ตฌ ์‹œ์ผฐ๋‹ค.

2. ์™ผ์ชฝ์œผ๋กœ ๋ฐ€๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๊ตฌํ˜„ํ•œ๋‹ค

2-1. 0์„ ์ œ๊ฑฐํ•œ๋‹ค

์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฐ€์žฅ ๊ฒฐ์ •์ ์ธ ์š”์ธ์€ 0 ์„ ์ œ๊ฑฐํ•œ ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ์—๋Š” ํˆฌํฌ์ธํ„ฐ๋ฅผ ํ’€๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ฆฌ๋“œ์—์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ ๋˜๋ฉด์„œ ํฌ์ธํ„ฐ 2๊ฐœ๊นŒ์ง€ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ๋จธ๋ฆฟ์†์—์„œ ๋ณต์žกํ•ด์กŒ๋‹ค.

๊ทธ๋ž˜์„œ NxN ๊ทธ๋ฆฌ๋“œ๋ฅผ N๊ฐœ์˜ ArrayDeque (row)๋กœ ์ƒ๊ฐํ•˜๊ณ  ํ’€์—ˆ๋‹ค. ์ด row์—๋Š” 0 ์ด ์•„๋‹Œ ์ˆซ์ž๋งŒ ํฌํ•จ์‹œ์ผฐ๋‹ค.

0 ์„ ์ œ์™ธ์‹œํ‚จ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  1. ๊ฐ™์€ ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•ด์„œ ์…€์„ ํ•ฉ์น˜๋Š” ๋กœ์ง์—์„œ ํ˜„์žฌ ์ˆซ์ž์˜ ๋‹ค์Œ ์ˆซ์ž๊ฐ€ 0์ด๋ฉด, ํ˜„์žฌ ์ˆซ์ž์™€ ๋‹ค๋‹ค์Œ ์ˆซ์ž๋ฅผ ๋น„๊ตํ•œ๋‹ค. ์ฆ‰, 0์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋น„๊ตํ•˜๋‹ˆ 0์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค

  2. ์ˆซ์ž๊ฐ€ ํ•ฉ์ณ์ง€์ง€ ์•Š๋”๋ผ๋„ ์šฐ์„  0์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ชจ๋‘ ๋ฐ€๋ฆฐ๋‹ค.

๊ทธ๋ž˜์„œ 0 ์…€๋“ค์€ ๊ฒฐ๊ตญ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ๋๋‚œ ๋งˆ์ง€๋ง‰์— ๋นˆ ์…€๋“ค์˜ ๊ฐ’์„ ์ฑ„์›Œ์ฃผ๊ธฐ ์šฉ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

2-2. ArrayDeque์˜ ์š”์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฉ๋ฌธํ•ด ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค

์šฐ์„  ArrayDeque์˜ ์ˆซ์ž๋Š” ๋ชจ๋‘ 0์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ๋‹ค์Œ ์ˆซ์ž์™€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ƒฅ ๊ฒฐ๊ณผ ArrayDeque์— ๊ทธ๋Œ€๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

๋‚˜๋Š” ์™ผ์ชฝ์œผ๋กœ ๋ฐ€๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— row์˜ ์•ž๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ•ฉ์ณ์งˆ ์ˆ˜ ์—†๋‹ค๋ฉด ArrayDeque์˜ ๋์— ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‘ ์ˆซ์ž์˜ ํ•ฉ์„ ArrayDeque์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

2-3. ์—ฐ์‚ฐ ๊ณผ์ • ์ดํ›„ ๋นˆ ์…€ ์ฒ˜๋ฆฌํ•˜๊ธฐ

ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•ด์„œ ๊ฒฐ๊ณผ ArrayDeque์„ ์™„์„ฑํ–ˆ๋‹ค๋ฉด ๊ทธ๋ฆฌ๋“œ ํ•ด๋‹น row์— ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

2-1์—์„œ 0 ์„ ์ œ์™ธ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด ArrayDeque์ด ๊ทธ๋ฆฌ๋“œ์˜ ์ปฌ๋Ÿผ ์ˆ˜๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์–ด์ฐจํ”ผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ด€ ์“ธ ํ•„์š” ์—†๋‹ค.

ํ’€์ด ์ฝ”๋“œ

์ถ”์–ต์˜ 2048๊ฒŒ์ž„ SWEA

๋ฐฐ์šด ์ 

์ด ๋ฌธ์ œ๋„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นจ๋‹ฌ์€ ํ’€์ด์˜€๋‹ค.

ํˆฌํฌ์ธํ„ฐ๋ฅผ ์จ์„œ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ ํ’€์ด๋„ ์žˆ์œผ๋‚˜, ๋‚˜๋Š” ๋‚ด์žฅ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด๊ฐ€ ๋กœ์ง์ด๋‚˜ ์ปดํŒŒ์ผ/๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.


๋‹จ์–ด ๋งž์ถ”๊ธฐ #9081

์‹ค๋ฒ„1

๋ฌธ์ œ ์ดํ•ด

  • ์ฃผ์–ด์ง„ ๋‹จ์–ด์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋“ค์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ์ฃผ์–ด์ง„ ๋‹จ์–ด์˜ ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๊ตฌํ•œ๋‹ค
  • ๋งŒ์•ฝ ์ฃผ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ๋งˆ์ง€๋ง‰ ์ˆœ์„œ๋ฉด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณ ์•ˆ

Next Permutation ์ •์„ ๋ฌธ์ œ๋‹ค. ์ด 3๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. Next Permutation์€ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ์•ž์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์‚ฌ์ „์ˆœ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ฒซ ๊ธ€์ž๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋ฅผ pivot์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

์‚ฌ์ „์ˆœ ์ •๋ ฌ์„ ๊ฐ€์ •ํ•˜๋ฉด 123456789์˜ ์งํ›„ ์ˆœ์„œ๋Š” 123456798์ด๋‹ค. ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋“ค๋ถ€ํ„ฐ ์Šค์™‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์œ ํšจํ•œ pivot์„ ์ฐพ์•˜๋‹ค๋ฉด ๋‹ค์‹œ ๋’ท์ชฝ๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉฐ ์ด pivot๊ณผ ์Šค์™‘ํ• , pivot์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์˜ ์š”์†Œ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

123456798์˜ ๋‹ค์Œ ์ˆœ์„œ๋Š” 123456879๋‹ค. 123456798์˜ pivot์€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์˜, arr[i]์™€ arr[i+1]๊ฐ€ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” 7์ด๋‹ค. successor๋Š” pivot๋ณด๋‹ค ํฐ ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” 8์ด๋‹ค. ์ด ๋‘˜์„ ์Šค์™‘ํ•˜๋ฉด 123456897์ด๋‹ค.

  1. ๋งˆ์ง€๋ง‰์œผ๋กœ, pivot ์ธ๋ฑ์Šค ๋‹ค์Œ๊ฐ’๋ถ€ํ„ฐ reverse๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค

2์—์„œ 123456897 ๊นŒ์ง€ ๊ตฌํ–ˆ๋Š”๋ฐ, ์ด ๋•Œ pivot์€ 7, successor๋Š” 8์ด์˜€๋‹ค. pivot ๋‹ค์Œ ๊ฐ’์ธ 9๋ถ€ํ„ฐ reverseํ•˜๋ฉด 123456879์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

ํ’€์ด ์ฝ”๋“œ

๋‹จ์–ด ๋งž์ถ”๊ธฐ ๋ฐฑ์ค€#9081

๋ฐฐ์šด ์ 

์ฒ˜์Œ์— ๋ญฃ๋„ ๋ชจ๋ฅด๊ณ  ์กฐํ•ฉ์œผ๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋‹ค. Next Permutation์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋‚˜๋‹ˆ๊นŒ ์–ผ๋งˆ๋‚˜ ๋น„ํšจ์œจ์ ์ธ ํ’€์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์žˆ์—ˆ๋˜์ง€ ๊นจ๋‹ฌ์•˜๋‹ค.


profile
์šฐ๋‹นํƒ•ํƒ•

0๊ฐœ์˜ ๋Œ“๊ธ€