๐ฅ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/154540
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ฅ์ฒซ๋ฒ์งธ ์๋ (๋ฐํ์ ์๋ฌ)
ํธ๊ธฐ๋กญ๊ฒ ํ์์ง๋ง ๋ฐํ์ ์๋ฌ... ๐ค
function solution(maps) {
var answer = [];
// visit ๊ด๋ จ map
const visit_map = maps.map((str,x)=>{
let temp = []
for(let y=0; y<=str.length-1; ++y){
temp.push(str[y]!=='X')
}
return temp
})
// {1: 10, 2:1, 3:2 } ์ ๊ฐ์ด ๊ฐ์์ฌ์ ์๋์ ์๋ฅผ ๋ด์ obj
let score_map = {}
// ์ฐ๊ฒฐ๋์ด ์๋ ๋
์ ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ํ๊ธฐ
const dfs =(position,mark)=>{
const [x,y] = position
visit_map[x][y] = false
if(score_map[mark]){
score_map[mark]+=Number(maps[x][y])
}else{
score_map[mark]=Number(maps[x][y])
}
// ์ํ์ข์ฐ
let move = [[x+1,y],[x-1,y],[x,y+1],[x,y-1]]
move.forEach(([new_x,new_y])=>{
// ์กด์ฌํ๊ณ , true ์ด๋ฉด
if(visit_map[new_x]&&visit_map[new_x][new_y]===true){
dfs([new_x,new_y],mark)
}
})
}
let mark = 0;
for(let i=0; i<=maps.length-1; ++i){
for(let j=0; j<=maps[0].length-1; ++j){
if(visit_map[i][j]===true){
++mark
dfs([i,j],mark)
}
}
}
answer = Object.values(score_map)
return answer.length ? answer.sort((a,b)=> a-b) : [-1] ;
}
๐ฅ๋๋ฒ์งธ ์๋ ( ์คํจ - ํน์ ์ผ์ด์ค ๋ฐํ์ ์๋ฌ )
๊ฒฐ๊ณผ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ 15, 16, 18, 19๋ฒ ์ผ์ด์ค ๋ฐํ์ ์๋ฌ๊ฐ ๋ํ๋๋ค.
function solution(maps) {
var answer = [];
let score_map = {}
maps = maps.map((line)=> line.split(''))
// ์ฐ๊ฒฐ๋์ด ์๋ ๋
์ ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ํ๊ธฐ
const dfs =(position,mark)=>{
let [x,y] = position
let score = maps[x][y]
if(answer[mark]){
answer[mark]+=Number(score)
}else{
answer[mark]=Number(score)
}
maps[x][y] ='X'
// ์ํ์ข์ฐ
let move = [[x+1,y],[x-1,y],[x,y+1],[x,y-1]]
move.forEach((new_position)=>{
let [nx,ny] = new_position
if(nx>=0 && nx<=maps.length-1 && ny>=0 && ny<=maps[0].length-1){
if(maps[nx][ny]!=='X'){
dfs([nx,ny],mark)
}
}
})
}
let mark = 0;
let [max_x,max_y]=[maps.length-1,maps[0].length-1]
for(let i=0; i<=max_x; ++i){
for(let j=0; j<=max_y; ++j){
if(maps[i][j]!=='X'){
dfs([i,j],mark)
++mark
}
}
}
return answer.length ? answer.sort((a,b)=> a-b) : [-1] ;
}
๐ฅ์ธ๋ฒ์งธ ์๋ ( ์ฑ๊ณต )
์ด๋ฒ์ ์กฐ๊ธ ๋ฐ๋ก ์ฌ๋ง๋ค์ ์ ์๋ฅผ ๋ฆฌ์คํธ์ ํ๊ธฐ ์ํ score_map ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ค์ด๋ ํธ๋ก answer์ ์ฌ๋ง๋ค์ ํฉ์ฐ ์ ์๋ฅผ ์ง์ push ํด์คฌ๋ค. ํ .... ์๋ฌด๋๋ ๋ฐํ์ ์๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ ๋ํ๋ฌ๋๊ฑฐ ๊ฐ๋ค.
function solution(maps) {
var answer = [];
maps = maps.map((line)=> line.split(''))
const dfs =(position)=>{
let [x,y] = position
if(x>=0 && x<maps.length && y>=0 && y<maps[0].length && maps[x][y]!=='X'){
let score = Number(maps[x][y])
maps[x][y] = 'X'
return score + dfs([x+1,y]) + dfs([x-1,y]) + dfs([x,y+1]) + dfs([x,y-1])
}else{
return 0
}
}
let [max_x,max_y]=[maps.length-1,maps[0].length-1]
for(let i=0; i<=max_x; ++i){
for(let j=0; j<=max_y; ++j){
if(maps[i][j]!=='X'){
answer.push(dfs([i,j]))
}
}
}
return answer.length ? answer.sort((a,b)=> a-b) : [-1] ;
}
๐ฅํ๊ธฐ
1,2 ๋ฒ์งธ ํน์ ์ผ์ด์ค ๋ฐํ์ ์๋ฌ๋ ์๋ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ด๊ณผํด์ ์ธ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ ๋ค๋ฉด 1,2 ๋ฒ ํ์ด์ 3๋ฒ ํ์ด์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น? ๊ทธ๊ฑด ๋ฐ๋ก ์ฌ๊ทํจ์๊ฐ ๋ ๋๋ง๋ค ์ ์๋ฅผ ๋ด๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ํน์ key๋ index๋ก ์ ๊ทผํ์ฌ ๊ฐ์ ๊ณ์ํด์ ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. 3๋ฒ์งธ ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ฌ๊ทํจ์๋ฅผ ๋๋๋ง๋ค ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๊ฒ์ด ์๋ ์ดํฉ์ ๊ตฌํ๋ค์ ์ต์ข ์ ์ผ๋ก ์ ์๋ฅผ ๋ด๋ answer ๋ฐฐ์ด์ ๋ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ ์ ๋ค๊ณ ์ดํดํ๋ฉด ๋ ๊ฒ์ด๋ค.
๋ณ๋๋ก ์ฒ์์ maps[1] = 'abcd' ์ธ ๊ฒฝ์ฐ maps[1][0] = '9' ๋ผ๊ณ ์ ์ธํด๋ maps[1]์ ๊ทธ๋๋ก 'abcd' ์์ (๋ฌธ์์ด ํน์ ๋ฐฐ์ด ์์ ๋ถ๊ฐ๋ฅ) ๊ฐ๊ณผํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ด์ ์ธ๋์๋ ๋ฐ ์๊ฐ์ ๋ง์ด ํ๋นํ๋๋ฐ ๋ค์์ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ด ์ ๋ ์ฃผ์ ํด์ผ๊ฒ ๋ค.
'๐Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ๋จ์ด๋ณํ (0) | 2024.08.24 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ์์ (0) | 2024.08.15 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ์์ ์ต๋ํ (0) | 2024.08.10 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2024.08.05 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ์ ์ ์ผ๊ฐํ (0) | 2024.08.04 |