BOJ ๋ฌธ์ œ ๋ณด๊ธฐ

1. ๋ฌธ์ œ

A๋ฅผ B๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋‹ค. 4์ž๋ฆฌ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ์กฐํšŒํ•˜๋Š”๋ฐ 0000๋ถ€ํ„ฐ 9999๊นŒ์ง€ ์ด 10000๊ฐœ์˜ ์ •์ ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ BFS๋ฅผ ํ™œ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์ •์ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š์Œ)

  1. D : n * 2
    • num*2 > 9999๋ผ๋ฉด 10000์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์˜ ๋‚˜๋จธ์ง€ ์ ์žฌ
  2. S : n - 1
    • n=0์ด๋ผ๋ฉด 9999 ์ ์žฌ
  3. L : ์™ผ์ชฝ์œผ๋กœ ์ž๋ฆฟ์ˆ˜ ์ด๋™ (1234 $\rightarrow$ 2341)
  4. R : ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ž๋ฆฟ์ˆ˜ ์ด๋™ (1234 $\rightarrow$ 4123)



2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์—ฐ์‚ฐ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ธฐ๋กํ•ด์•ผ ํ•œ๋‹ค. ๋ฐฐ์—ด์€ ์ด ๋„ค ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  1. ์—ฐ์‚ฐ ํšŸ์ˆ˜(๊ฑฐ๋ฆฌ): dist[]
  2. ์ด์ „ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ: pre[]
  3. ๋ช…๋ น์–ด: cmd[]
  4. ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ: visited[]

10000๊ฐœ์˜ ์ •์  ์ค‘ A์—์„œ B๋กœ ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด ๊ฐœ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค. cmd[]์— ๋ชจ๋“  ์—ฐ์‚ฐ ๊ณผ์ •์„ ์ €์žฅํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ํ•œ์—†์ด ์ปค์งˆ ์ˆ˜ ์žˆ์–ด ์ด์ „ ์—ฐ์‚ฐ ๊ณผ์ •์„ cmd[i]์— ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.

pre[]์„ ํ†ตํ•ด ์ด์ „ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์—ญ์ถ”์ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ cmd[]์—๋Š” i๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ช…๋ น์–ด๋งŒ ์ €์žฅํ•˜์ž.


i dist[] pre[] cmd[]
0 2 1 โ€˜Sโ€™
1 1 2 โ€˜Sโ€™
2 0 -1 -
3 2 4 โ€˜Sโ€™
4 1 2 โ€˜Dโ€™
5 3 0 โ€˜Sโ€™

0~5๊นŒ์ง€์˜ ์ˆ˜ ๋ฒ”์œ„ ์ค‘ 2์—์„œ 3์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ์•„๋ž˜ ๋ฒˆํ˜ธ๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ dist์˜ ๊ฐ’์ด ๋œ๋‹ค.

  1. ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 0์ธ ์ˆ˜๋Š” 2๋งŒ ํ•ด๋‹นํ•œ๋‹ค. ์ด์ „ ๊ฐ’์€ ์—†์œผ๋ฏ€๋กœ -1, ๋ช…๋ น์–ด๋Š” ๋นˆ ์นธ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. 2์—์„œ 2๋ฅผ ๊ณฑํ•œ ์ˆ˜(D) 4์™€ 1์„ ๊ฐ์‚ฐํ•œ ์ˆ˜(S) 1์ด ํ•ด๋‹นํ•œ๋‹ค.

  3. 4์—์„œ 1์„ ๊ฐ์‚ฐํ•œ ์ˆ˜(S) 3๊ณผ 1์—์„œ 1์„ ๊ฐ์‚ฐํ•œ ์ˆ˜ 0์ด ๊ฐ๊ฐ ์ด๋™๊ฑฐ๋ฆฌ 2๋ฅผ ๊ฐ–๋Š”๋‹ค.

๋”ฐ๋ผ์„œ 2์—์„œ 3์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ ๊ณผ์ •์€ ์ด 2๋ฒˆ์ด ๋œ๋‹ค. pre ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ช…๋ น์–ด๋ฅผ ์—ญ์ถ”์ ํ•œ ๋ฌธ์ž์—ด์€ SD๊ฐ€ ๋˜๋ฉฐ ์ตœ์ข… ๊ฒฐ๊ณผ๋กœ DS๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.



3. ์†Œ์Šค ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>
#include <iostream>
#include <queue>
#include <string>
#include <cstring>
using namespace std;

int t, a, b, num, cal;
int dist[10001];
int pre[10001];
char cmd[10001];
bool visited[10001];
queue<int> q;

int main()
{
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d %d", &a, &b);
        
		// ๊ฐ text๋งˆ๋‹ค ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
		memset(dist, 0, sizeof(dist));
		memset(pre, 0, sizeof(pre));
		memset(cmd, 0, sizeof(cmd));
		memset(visited, 0, sizeof(visited));

		dist[a] = 0;
		pre[a] = -1;
		visited[a] = true;
		q.push(a);

		while (!q.empty())
		{
			num = q.front();
			q.pop();
			
			// num*2
			cal = num * 2;
			if (cal > 9999) cal = cal % 10000;
			if (visited[cal] == 0)
			{
				q.push(cal);
				dist[cal] = dist[num] + 1;
				pre[cal] = num;
				cmd[cal] = 'D';
				visited[cal] = 1;
			}

			// num-1
			cal = num - 1;
			if (cal == -1) cal = 9999;
			if (visited[cal] == 0)
			{
				q.push(cal);
				dist[cal] = dist[num] + 1;
				pre[cal] = num;
				cmd[cal] = 'S';
				visited[cal] = 1;
			}
			
			// ์™ผ์ชฝ์œผ๋กœ num ์ž๋ฆฟ์ˆ˜ ์ด๋™
			cal = (num % 1000) * 10 + num / 1000;
			if (visited[cal] == 0)
			{
				q.push(cal);
				dist[cal] = dist[num] + 1;
				pre[cal] = num;
				cmd[cal] = 'L';
				visited[cal] = 1;
				
			}
			
			// ์˜ค๋ฅธ์ชฝ์œผ๋กœ num ์ž๋ฆฟ์ˆ˜ ์ด๋™
			cal = (num / 10) + (num % 10) * 1000;
			if (visited[cal] == 0)
			{
				q.push(cal);
				dist[cal] = dist[num] + 1;
				pre[cal] = num;
				cmd[cal] = 'R';
				visited[cal] = 1;
			}
		}
		
		// ๋ฌธ์ž์—ด ์ดˆ๊ธฐํ™” ๋ฐ ๊ฒฐ๊ณผ๊ฐ’ ํ• ๋‹น
		string result;
		while (b != a)
		{
			result.push_back(cmd[b]);
			b = pre[b];
		}
        
		// ๋ฌธ์ž์—ด ์—ญ์ถœ๋ ฅ
		while (!result.empty())
		{
			printf("%c", result.back());
			result.pop_back();
		}
		printf("\n");
	}
}

image



4. ์ƒ๊ฐ ์ •๋ฆฌ

์ผ€์ด์Šค๋งˆ๋‹ค bfs๋ฅผ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” bfs ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์„ฑํ•ด๋„ ์›ํ•˜๋Š” ๊ฐ’์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌด์ž‘์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋ฅผ ์™ธ์šฐ๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ  ์ด๋ก ์„ ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

์ฝ”๋“œ ์ž‘์„ฑ ๋„์ค‘ ๋ฐ”๋ณด ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ–ˆ๋‹ค. ์ผ€์ด์Šค๋งˆ๋‹ค ์—ฐ์‚ฐ ๋ฐฐ์—ด๊ณผ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ…Œ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด๋„ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹คโ€ฆ ๋Š” ์‚ฌ์‹ค์„ ์žŠ์–ด๋ฒ„๋ฆฌ๊ณ  ์ „์—ญ์œผ๋กœ ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด์„ ์ดˆ๊ธฐํ™”ํ•œ ๊ฒƒ์ด๋‹ค. ์ผ€์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•  ๋•Œ ๋‹ค์‹œ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š”์ง€, ๋ฐ์ดํ„ฐ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š”์ง€(a, b์ฒ˜๋Ÿผ!) ๊ณ ๋ คํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ผญ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ ๊ณผ์ •์„ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์“ธ ๊ฒƒ!! ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ๋…ธ๋ ฅํ•˜์ž.

Leave a comment