๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ํ•˜๊ธฐ (77485)

๋ฌธ์ œ๋งํฌ

์ ‘๊ทผ ๋ฐฉ์‹

(2, 2, 5, 4)
1. ์ด์ฒ˜๋Ÿผ ํšŒ์ „ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋–ผ์–ด๋‚ด์„œ ์ž„์˜์˜ ๋ฐฐ์—ด order์— ํšŒ์ „ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜์—ฌ ์‚ฝ์ž…ํ•œ๋‹ค.
(์–ด๋””์„œ๋ถ€ํ„ฐ์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์ด์–ด์ง€๋„๋ก ๋งŒ๋“ค์–ด์•ผํ•จ.)

๊ทธ๋ฆฌ๊ณ  order์˜ ์ œ์ผ ์•ž์˜ ์š”์†Œ๋ฅผ ์ œ์ผ ๋’ค๋กœ ๋ณด๋‚ด๋ฉด ์˜ˆ์ œ์ฒ˜๋Ÿผ ๋Œ์•„๊ฐ„๋‹ค.
order = [1,2,3,4,5,6]

order.push(order.shift())
console.log(order)
// [2, 3, 4, 5, 6, 1]โ€‹

์›๋ฆฌ๋Š” order.shift()๋Š” ์ œ์ผ ์•ž ์š”์†Œ๋ฅผ ๋–ผ์–ด์„œ returnํ•˜๋Š”๋ฐ, ์ด๋ฅผ order.push()ํ•˜์—ฌ ์ œ์ผ ๋’ค์— ์‚ฝ์ž…ํ•œ ๊ฒƒ์ด๋‹ค.

๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ œ์ผ ๋’ค์— ์š”์†Œ๋ฅผ ์ œ์ผ ์•ž์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.

order = [1,2,3,4,5,6]

order.unshift(order.pop())
console.log(order)
// [6, 1, 2, 3, 4, 5]

 ์ œ์ผ ๋’ค์˜ ์š”์†Œ๋ฅผ ๋–ผ์–ด๋‚ด์–ด ์ œ์ผ ์•ž์— ์‚ฝ์ž…ํ•˜์˜€๋‹ค.

2. ์•ž์„œ ์ถ”์ถœํ•œ order๋ฅผ ํšŒ์ „ํ•œ ๋’ค, ๋‹ค์‹œ ์›์ƒํƒœ๋กœ ๋Œ๋ ค๋†“๋Š”๋‹ค.

matrix[row][col1-1] = order.shift()

order.shift()๊ฐ€ ์ œ์ผ ์•ž์š”์†Œ๋ฅผ ๋–ผ์–ด return ํ•˜๋ฏ€๋กœ ํšŒ์ „ํ•œ ์š”์†Œ๋“ค์ด ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

function solution(rows, columns, queries) {
    let answer = []
    let matrix = new Array(rows);
    
    for (let row = 0; row < rows; row++) matrix[row] = new Array(columns);
    
    for (let row = 0; row < rows; row++){
      for (let col = 0; col < columns; col++){
        matrix[row][col] = (columns * row) + col + 1;
      }
    }
    
    queries.forEach((query) => {
      let order = [];
        
      const [row1, col1, row2, col2] = query;
      for(let row = row1; row < row2; row++) order.push(matrix[row][col1-1])
      for(let col = col1; col < col2; col++) order.push(matrix[row2-1][col])
      for(let row = row2; row > row1; row--) order.push(matrix[row-2][col2-1])
      for(let col = col2; col > col1; col--) order.push(matrix[row1-1][col-2])
        
      order.push(order.shift());
      answer.push(Math.min(...order))
        
      for(let row = row1; row < row2; row++) matrix[row][col1-1] = order.shift()
      for(let col = col1; col < col2; col++) matrix[row2-1][col] = order.shift()
      for(let row = row2; row > row1; row--) matrix[row-2][col2-1] = order.shift()
      for(let col = col2; col > col1; col--) matrix[row1-1][col-2] = order.shift()
    })
    
    return answer
}