[BOJ/18405] ๊ฒฝ์Ÿ์  ์ „์—ผ, c++

2021. 5. 17. 16:44ยทDEV/PS

๐Ÿ”— ๋งํฌ

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

 

18405๋ฒˆ: ๊ฒฝ์Ÿ์  ์ „์—ผ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N, K๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ์‹œํ—˜๊ด€์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ–‰์€ N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•ด๋‹น ์œ„์น˜

www.acmicpc.net

https://github.com/jokj624/PS/blob/master/15000-20000/18405.cpp

 

jokj624/PS

BOJ, CodeForces ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์†Œ์Šค์ฝ”๋“œ. Contribute to jokj624/PS development by creating an account on GitHub.

github.com

 

๐Ÿคฏ ํ•œ์ค„ ํ›„๊ธฐ

 ํ•œ๋ฒˆ์— ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์‹ถ๋‹ค. ๐Ÿค”

๐Ÿคท ๋ฌธ์ œ

๐Ÿ‘ฉ‍๐Ÿ’ป ํ’€์ด

๋‹จ์ˆœํ•œ BFS ๋ฌธ์ œ์ด๋‹ค. ๊ทผ๋ฐ ๊ณ ๋ คํ•ด์•ผํ•  ์ ์ด ์กฐ๊ธˆ ์žˆ๋Š”๋ฐ ๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋“ฏ, ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋ฐ”์ด๋Ÿฌ์Šค๋ถ€ํ„ฐ ์ฆ์‹ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. 

์ฒ˜์Œ์— ์ด ์ด์œ ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ผ๋Š”๋ฐ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์‚ฝ์ž… ๋•Œ๋งˆ๋‹ค heap ์ •๋ ฌ์ด ์ผ์–ด๋‚˜ ์ด ๋ฌธ์ œ ๊ตฌํ˜„์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ํ๋กœ ๋ฐ”๊ฟจ๋‹ค๊ฐ€ ์–ด์จŒ๋“  ๋งค ์ดˆ๋งˆ๋‹ค sorting์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋‹ˆ vector๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

virus ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด virus ์ข…๋ฅ˜ ๋ฒˆํ˜ธ์™€ ์œ„์น˜ ์ขŒํ‘œ๋ฅผ ๋ฒกํ„ฐ์— ์ €์žฅํ•ด์ค€๋‹ค. ๋งค ์ดˆ๋งˆ๋‹ค virus๊ฐ€ ์ €์žฅ๋œ ๋ฒกํ„ฐ๋ฅผ sortingํ•ด์ค€๋‹ค. ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๊ฒƒ ๋ถ€ํ„ฐ ์•ž์— ์˜ค๋„๋ก!

๊ทธ๋ฆฌ๊ณ  BFS ๋ฅผ ํ†ตํ•ด ๋ฒกํ„ฐ์— ํ˜„์žฌ ์žˆ๋Š” virus๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ƒ-ํ•˜-์ขŒ-์šฐ๋กœ ํผ์ง€๊ฒŒ ํ•œ๋‹ค. 

 

visit vector๋Š” ํ•„์š”์—†๋‹ค. ์–ด์ฐจํ”ผ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์—†๋Š” ์นธ์€ 0์ด๊ณ , ์žˆ๋Š” ์นธ์€ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฑ„์›Œ์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ œ์ถœํ–ˆ์„ ๋•Œ, TLE๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ค๊ฐ€ S์ดˆ๊ฐ€ ๋˜๊ธฐ ์ „์— ์ด๋ฏธ X,Y ์นธ์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ฑ„์›Œ์กŒ๋‹ค๋ฉด ๋”์ด์ƒ ๋ณผ ํ•„์š” ์—†๋Š”๊ฑธ ์ฒดํฌํ•˜์ง€ ๋ชปํ–ˆ์–ด์„œ break๋ฌธ์„ ์ถ”๊ฐ€ ํ•ด์คฌ๋”๋‹ˆ ๋ฐ”๋กœ ํ†ต๊ณผํ–ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

//AC
//BOJ 18405 ๊ฒฝ์Ÿ์  ์ „์—ผ
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int arr[202][202];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};  //์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ ๋ฐฐ์—ด
struct Virus{
	int virus;
	int x;
	int y;
};   //Virus ๊ตฌ์กฐ์ฒด, ์ข…๋ฅ˜, ์œ„์น˜ ์ •๋ณด ๋‹ด๋Š”๋‹ค.
bool cmp(const Virus& v1, const Virus& v2){
	return v1.virus < v2.virus;
}   // virus ์ข…๋ฅ˜๊ฐ€ ๋‚ฎ์€ ๊ฒƒ ๋ถ€ํ„ฐ ์ •๋ ฌ
int main(){
	vector<Virus> vec;
	int N, K, S, X, Y;
	scanf("%d %d", &N, &K);
	for(int i=1; i<=N; i++){
		for(int j=1; j<=N; j++){
			scanf("%d", &arr[i][j]);
			if(arr[i][j] >= 1 && arr[i][j] <= K){
				vec.push_back({arr[i][j], i, j});   // ๋ฐ”์ด๋Ÿฌ์Šค ์ •๋ณด push 
			}
		}
	}
	scanf("%d %d %d", &S, &X, &Y);
	int s = 0;
	while(s < S){  // ์ดˆ๊ฐ€ ์•„์ง S์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด
		sort(vec.begin(), vec.end(), cmp);  //1์ดˆ ์ฆ๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ sort 
		int len = vec.size();
		for(int j=0; j<len; j++){
			Virus v = vec[j];
			for(int i=0; i<4; i++){
				int nx = v.x + dx[i];
				int ny = v.y + dy[i];   
				if(nx <= 0 || ny <= 0 || nx > N || ny > N)	continue;  //๊ฒฝ๊ณ„์„  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
				if(!arr[nx][ny]){
					arr[nx][ny] = v.virus;  // ๋ฐ”์ด๋Ÿฌ์Šค ์ฑ„์šฐ๊ธฐ
					vec.push_back({arr[nx][ny], nx, ny});
				}
			}
		}
		if(arr[X][Y] > 0)	break;  // s < S ์ผ ๋•Œ, ์ด๋ฏธ ์ฑ„์›Œ์กŒ๋‹ค๋ฉด ๋” ์ด์ƒ ๋ณผ ํ•„์š” ์—†๋‹ค. 
		s++;  //1์ดˆ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค
	}
	printf("%d", arr[X][Y]);
	return 0;
}

์‚ฌ์‹ค ํ’€๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ์ง€? ํ•˜๊ณ  ๊ตฌ๊ฒฝํ•ด๋ดค๋Š”๋ฐ

๋งค ์ดˆ๋งˆ๋‹ค sort๋ฅผ ํ•œ ๊ฑด ์—„์ฒญ ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ์˜€๋‹ค! 

๋งจ ์ฒ˜์Œ์—๋งŒ sort๋ฅผ ํ•ด์ฃผ๋ฉด ๊ทธ ์ดํ›„๋กœ๋Š” ์•Œ์•„์„œ ์ข…๋ฅ˜๊ฐ€ ๋‚ฎ์€ ๋ฐ”์ด๋Ÿฌ์Šค ๋ถ€ํ„ฐ ๋ฒกํ„ฐ์— ๋‹ด๊ธธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ฒฐ๊ตญ ์ฒ˜์Œ์—๋งŒ ์ •๋ ฌํ•ด์ฃผ๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ๋’ค์—๋Š” ์•Œ์•„์„œ ๋‚ฎ์€ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ ํ•œ์ค„๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ ์ œ์ถœํ–ˆ๋”๋‹ˆ ๋ฌด๋ ค 4ms๋‚˜ ์ค„์–ด๋“ค์—ˆ๋‹ค.

//AC
//BOJ 18405 ๊ฒฝ์Ÿ์  ์ „์—ผ
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int arr[202][202];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
struct Virus{
	int virus;
	int x;
	int y;
};
bool cmp(const Virus& v1, const Virus& v2){
	return v1.virus < v2.virus;
}
int main(){
	vector<Virus> vec;
	int N, K, S, X, Y;
	scanf("%d %d", &N, &K);
	for(int i=1; i<=N; i++){
		for(int j=1; j<=N; j++){
			scanf("%d", &arr[i][j]);
			if(arr[i][j] >= 1 && arr[i][j] <= K){
				vec.push_back({arr[i][j], i, j});
			}
		}
	}
	scanf("%d %d %d", &S, &X, &Y);
	int s = 0;
    sort(vec.begin(), vec.end(), cmp);
	while(s < S){
		int len = vec.size();
		for(int j=0; j<len; j++){
			Virus v = vec[j];
			for(int i=0; i<4; i++){
				int nx = v.x + dx[i];
				int ny = v.y + dy[i];
				if(nx <= 0 || ny <= 0 || nx > N || ny > N)	continue;
				if(!arr[nx][ny]){
					arr[nx][ny] = v.virus;
					vec.push_back({arr[nx][ny], nx, ny});
				}
			}
		}
		if(arr[X][Y] > 0)	break;
		s++;
	}
	printf("%d", arr[X][Y]);
	return 0;
}

 

์•„์ง๋„ ํ•œ๋ฒˆ์— ํšจ์œจ์ ์ด๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ ค๋ฉด ๋ฉ€์—ˆ๋‹ค. 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

[BOJ/1103] ๊ฒŒ์ž„, c++  (0) 2021.05.29
[BOJ/13334] ์ฒ ๋กœ, c++  (0) 2021.05.20
[BOJ/20127] Y-์ˆ˜์—ด, C++  (0) 2021.05.14
์ œ 1ํšŒ SMUPC ์ˆ™๋ช… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์ง„๋Œ€ํšŒ ์ฐธ๊ฐ€ ํ›„๊ธฐ  (4) 2021.05.09
[BOJ/7569] ํ† ๋งˆํ† , c++  (0) 2021.05.06
'DEV/PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ/1103] ๊ฒŒ์ž„, c++
  • [BOJ/13334] ์ฒ ๋กœ, c++
  • [BOJ/20127] Y-์ˆ˜์—ด, C++
  • ์ œ 1ํšŒ SMUPC ์ˆ™๋ช… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์ง„๋Œ€ํšŒ ์ฐธ๊ฐ€ ํ›„๊ธฐ
jobchae
jobchae
๋งํ•˜๋Š” ๊ฐ์ž์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋„์ ์ด๋Š” Node.js ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.
  • jobchae
    JOBCHAE
    jobchae
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿš€ JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • ์žก๋‹คํ•œ ๊ฐœ๋ฐœ ์ผ์ง€ (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • ์ถ•๊ตฌ (0)
      • ์ผ์ƒ (19)
      • ์˜ํ™” (3)
      • ์Œ์•… (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿ’ป Github
    • ๐Ÿ™‹๐Ÿป Linkedin
    • ๐Ÿ“– ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • PS Github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    JavaScript
    PS
    nodejs
    Nest.js
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์Šฌ๋ž™
    DFS
    ๋ ›์ธ ๋ฝํŽ˜์Šคํ‹ฐ๋ฒŒ
    boj
    Express
    ํšŒ๊ณ 
    DP
    ๋ฐฑ์ค€
    ์Šฌ๋ž™๋ด‡
    mongoDB
    react
    ์ผ์ƒ
    ์•ฑ์žผ
    ๋ฆฌ์•กํŠธ
    SOPT
    ์†ํŠธ
    node.js
    GitHub
    typescript
    ์œ„์ƒ์ •๋ ฌ
    ์ด๋ถ„ํƒ์ƒ‰
    ์šฐ์„ ์ˆœ์œ„ํ
    BFS
    ๊ฐœ๋ฐœ
    db
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
jobchae
[BOJ/18405] ๊ฒฝ์Ÿ์  ์ „์—ผ, c++
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”