hades

[Baekjoon] 16928๋ฒˆ: ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 16928๋ฒˆ: ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„

hades1 2024. 10. 15. 00:11

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

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

 

์ถœ๋ฐœ์ง€์ธ 1์—์„œ ๋ชฉ์ ์ง€์ธ 100๊นŒ์ง€ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด, '์‚ฌ๋‹ค๋ฆฌ๋Š” ๋†’์€ ๋ฒˆํ˜ธ์˜ ์นธ์œผ๋กœ ์ด๋™์‹œ์ผœ ๋•Œ๋ฌธ์— ์‚ฌ๋‹ค๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒƒ ์•„๋‹Œ๊ฐ€? '๋ผ๋Š” ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฌด์กฐ๊ฑด ์‚ฌ๋‹ค๋ฆฌ๋งŒ ์ด์šฉํ•ด์•ผ๋งŒ ์ข‹์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฆฌ๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, {(2, 70) (75, 79) (71, 40) (41, 99)}๋ผ๋Š” ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์„ ๋•Œ, ์‚ฌ๋‹ค๋ฆฌ๋งŒ ์ด์šฉํ•œ๋‹ค๋ฉด, 1 (2->70) (75->79) 85 91 97 100์œผ๋กœ ์ฃผ์‚ฌ์œ„๋ฅผ 6๋ฒˆ ๋˜์ ธ์•ผ ํ•˜์ง€๋งŒ, ๋ฑ€์„ ์„ž๋Š”๋‹ค๋ฉด, 1 (2->70) (71->40) (41->99) 100์œผ๋กœ 4๋ฒˆ๋งŒ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. ( → ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ง„ ํšŸ์ˆ˜์ด๋‹ค. ๋ฑ€ ๋˜๋Š” ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๊ฒƒ์€ ->๋กœ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค)

 

๋‹ค์‹œ ๋งํ•ด์„œ, ์–ด๋–ค ์นธ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ ธ +1๋ถ€ํ„ฐ +6๊นŒ์ง€ ์ด๋™์‹œ์ผœ์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ, BFS๋ฅผ ์ด์šฉํ•ด์•ผ ํ•จ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


๊ฐ ์นธ์—๋Š” ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ๋ฑ€์ด ์žˆ๊ฑฐ๋‚˜, ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฏ€๋กœ, ์ผ์ฐจ์› ๋ฒกํ„ฐ(link)๋กœ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค. ๋งŒ์•ฝ, ์–ด๋–ค ์นธ์— ์‚ฌ๋‹ค๋ฆฌ๋„ ์žˆ๊ณ , ๋ฑ€๋„ ์žˆ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค๋ฉด, ์ด์ฐจ์› ๋ฒกํ„ฐ๊ฐ€ ํ•„์š”ํ–ˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค.

 

์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ง€๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด, ํ์— ์„ ๋ณ„ํ•ด์„œ ๋‹ด๊ธฐ ์œ„ํ•ด, ๊ฐ ์นธ๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋˜์ง„ ์ฃผ์‚ฌ์œ„์˜ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ์ผ์ฐจ์› ๋ฒกํ„ฐ(rolloing_count)์— ์ €์žฅํ•œ๋‹ค.

 

ํ์—์„œ ํ˜„์žฌ ์œ„์น˜(cur_loc)๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ, ํ˜„์žฌ ์œ„์น˜์—์„œ ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ง„ ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•ด ๋‹ค์Œ ์œ„์น˜(next_loc)๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์นธ์— ๋ฑ€์ด๋‚˜ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฑ€์ด๋‚˜ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค. 

 

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

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int n, m, x, y, u, v;
vector<int> link(101);
vector<int> rolling_count(101, 1e9 + 7);

void game() {
	queue<int> q;
	q.push(1);
	rolling_count[1] = 0;
	while (!q.empty()) {
		int cur_loc = q.front();
		q.pop();
		for (int i = 1; i <= 6; i++) {
			int next_loc = cur_loc + i;
			if (next_loc > 100) {
				continue;
			}
			if (link[next_loc] != 0) {
				next_loc = link[next_loc];
			}
			if (rolling_count[next_loc] > rolling_count[cur_loc] + 1) {
				rolling_count[next_loc] = rolling_count[cur_loc] + 1;
				q.push(next_loc);
			}
		}
		
	}
}

int main(void)
{	
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		link[x] = y;
	}
	for (int i = 0; i < m; i++) {
		cin >> u >> v;
		link[u] = v;
	}
	
	game();

	cout << rolling_count[100] << "\n";
	
	return 0;
}