const { default: cluster } = require('cluster')
const fs = require('fs')
const input = fs.readFileSync('example.txt', 'utf-8').toString().split('\n')
// const input = fs.readFileSync('dev/stdin', 'utf-8').toString().trim().split('\n')
const T = input.shift()
const moves = input.join(' ').split(' ')
const dir = [[1,0], [-1,0], [0,-1],[0,1]]
//행이 상으로 이동, 행이 하로 이동, 열이 좌로 이동, 열이 우로 이동
const solution = (n) => {
let cur_dir = 0
let tutle = [0 , 0]
let max_x = 0
let max_y = 0
let min_x = 0
let min_y = 0
for(let i=0; i<moves[n].length; i++){
if(moves[n][i]=='F'){
tutle[0] = tutle[0] + dir[cur_dir][0]
tutle[1] = tutle[1] + dir[cur_dir][1]
}
else if(moves[n][i]=='B'){
tutle[0] = tutle[0] - dir[cur_dir][0]
tutle[1] = tutle[1] - dir[cur_dir][1]
}
else if(moves[n][i]=='L'){
if(cur_dir === 0){
cur_dir = 2
//상 >> 좌
}else if(cur_dir === 1){
cur_dir = 3
//하 >> 우
}else if(cur_dir === 2){
cur_dir = 1
//좌 >> 하
}else{
cur_dir = 0
//우 >> 상
}
}
else if(moves[n][i] =='R'){
if(cur_dir === 0){
cur_dir = 3
//상 >> 우
}else if(cur_dir === 1){
cur_dir = 2
//하 >> 좌
}else if(cur_dir === 2){
cur_dir = 0
//좌 >> 상
}else{
cur_dir = 1
//우 >> 하
}
}
tutle[0] > max_x ? max_x = tutle[0] : max_x = max_x
tutle[0] < min_x ? min_x = tutle[0] : min_x = min_x
tutle[1] > max_y ? max_y = tutle[1] : max_y = max_y
tutle[1] < min_y ? min_y = tutle[1] : min_y = min_y
/*
한번의 명령어를 실행 후 최소값인지 최소값인지 판별 하고 각각 min,max 변수에 할당
*/
}
return (max_x - min_x)*(max_y - min_y)
/*
반복문이 종료 됐다는건 하나의 테스트케이스를 모두 돌았다는 의미이므로 계산식에 대입 후 반환
*/
}
for(let i=0; i<moves.length; i++){
console.log(solution(i))
}
좌표 조정에 대해 더 확실히 짚고 갈 수 있었고 내가 떠오르고 이해하기 쉬운 방향으로 만드는 방법도 배웠다!
좌표킹강경규
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.