Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- 다이나믹프로그래밍
- 리액트댓글기능
- js코테
- 프로그래머스코테
- 리액트커뮤니티
- HTML5
- 백준골드
- 백준
- 코딩테스트
- 코테
- 프로그래머스
- 백준구현
- HTML
- 자바스크립트
- dp알고리즘
- JS
- 안드로이드 스튜디오
- 백준알고리즘
- 백준nodejs
- 익스프레스
- 몽고DB
- 백준js
- 리액트
- 프로그래머스JS
- CSS
- 포이마웹
- css기초
- 백준구현문제
- JS프로그래머스
Archives
- Today
- Total
개발새발 로그
[JS] 백준 10025번 : 적록색약 - 구현문제 본문
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
📋풀이방법
1. 적록색약인 사람과 아닌사람을 구분해서 DFS로 상하좌우를 검사해 그룹을 만든다.
2. DFS할 때 visited를 두개를 생성해서 둘이 따로 구분해준다.
🤟내 제출
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim();
input=input.replace(/\r/g,"").split("\n");
let N=Number(input.shift().split(" "));
let arr=[];
for (let i = 0; i < N; i++) {
arr.push(input[i].split(''));
}
let dx=[0,1,-1,0];
let dy=[1,0,0,-1];
let R_cnt=0;
let RG_cnt=0;
function R_DFS(color,y,x){
for(var i=0;i<4;i++){
let nx=x+dx[i];
let ny=y+dy[i];
if(nx>=0 && ny>=0 && ny<N && nx<N && visited_R[ny][nx]==0){
if(arr[ny][nx]==color){
visited_R[ny][nx]=1;
R_DFS(arr[ny][nx],ny,nx)
}
}
}
}
function RG_DFS(color,y,x){
for(var i=0;i<4;i++){
let nx=x+dx[i];
let ny=y+dy[i];
if(nx>=0 && ny>=0 && ny<N && nx<N && visited_RG[ny][nx]==0){
if(color=="R"){
if(arr[ny][nx]=="R" || arr[ny][nx]=="G"){
visited_RG[ny][nx]=1;
RG_DFS(arr[ny][nx],ny,nx)
}
}
else if(color=="G"){
if(arr[ny][nx]=="R" || arr[ny][nx]=="G"){
visited_RG[ny][nx]=1;
RG_DFS(arr[ny][nx],ny,nx)
}
}
else {
if(arr[ny][nx]==color){
visited_RG[ny][nx]=1;
RG_DFS(arr[ny][nx],ny,nx)
}
}
}
}
}
let visited_R=Array.from({length:N},()=>Array(N).fill(0))
let visited_RG=Array.from({length:N},()=>Array(N).fill(0))
for(var i=0;i<N;i++){
for(var j=0;j<N;j++){
if(visited_R[i][j]==0){
R_cnt++;
visited_R[i][j]=1;
R_DFS(arr[i][j],i,j);
}
if(visited_RG[i][j]==0){
RG_cnt++;
visited_RG[i][j]=1;
RG_DFS(arr[i][j],i,j);
console.log(visited_RG)
}
}
}
console.log(visited_RG)
console.log(R_cnt,RG_cnt);
💢어려웠던 점
1. 이 문제에서 어려웠던 점은 없었다!
728x90
반응형
LIST
'알고리즘 > 구현' 카테고리의 다른 글
[JS] 백준 7569번 : 토마토(3차원배열) - 구현문제 (0) | 2023.07.28 |
---|---|
[JS] 백준 17135 : 캐슬 디펜스 (0) | 2023.07.19 |
[JS] 백준 1193번 : 분수찾기 (0) | 2023.07.18 |
[JS] 백준 16235 : 나무 재테크 (0) | 2023.07.17 |