https://www.acmicpc.net/problem/1331
구현
- A,B,C로 표현되는 column 좌표를 아스키코드 변경을 이용
6*6
사이즈의 이중 배열을 통해 방문 체크- 절대값을 이용하여 나이트의 이동에 맞는지 확인
const solution = (size,array)=>{
const transPosition = (alpha,number)=>{return [alpha.charCodeAt()-65,Number(number)-1]};
const check = (r1,c1,r2,c2) => {
const [gap1,gap2] = [Math.abs(r1-r2),Math.abs(c1-c2)]
if (gap1>=3||gap2>=3||gap1+gap2 !== 3){return false};
return true;
};
const visit = Array.from({length:6},()=> Array.from({length:6}).fill(0))
let [br,bc] = transPosition(...array[size*size-1]);
for (position of array){
const [r,c] = transPosition(...position);
if (visit[r][c]===1 || check(br,bc,r,c)===false) {return false};
visit[r][c] = 1;
[br,bc] = [r,c];
}
return true;
}
const fs = require('fs');
const URI = process.platform === 'linux'? 0:'./1331.txt';
const inputs = fs.readFileSync(URI,'utf-8').toString().trim().split('\n');
const size = 6
const ans = solution(size,inputs)
if (ans===true){console.log("Valid")}
else {console.log("Invalid")}
후기
- python으로 먼저 문제를 푼 후, javascript를 이용하여 작성하는 형식으로 풀었다.
- 최근에 javascript를 공부했기에 알고리즘 문제를 통해 익숙해지려고 오랜만에 node.js로 풀었다.
- 그 전까지는 체계적이지 않았다는 것이 느껴졌다(함수를 표현식, 에로우 펑션을 혼용하거나
const [gap1,gap2]
대신 한줄씩 할당하는 등)- 코드 스타일을 정리해야겠다
- 최초 python 코드는 아래 작성, 조금 불편하게 구현했다
import math
def solution(T:int,ls:list[str])->bool:
def transPosition(position:str)->tuple[int]:
return (ord(position[0])-65,int(position[1])-1)
def check(r1:int,c1:int,r2:int,c2:int)->bool:
if abs(r1-r2)>=3 or abs(c1-c2)>=3: return False
gap = abs(r1-r2) + abs(c1-c2)
if gap != 3: return False
return True
size = int(math.sqrt(T))
visit = [[0] * size for _ in range(size)]
sr,sc = transPosition(ls[0])
br,bc = sr,sc
visit[br][bc] = 1
for i in range(1,T):
position = ls[i]
r,c = transPosition(position)
if visit[r][c] or not check(br,bc,r,c): return False
visit[r][c] = 1
br,bc = r,c
if not check(sr,sc,br,bc): return False
return True
turn = 36
ls = [input() for _ in range(turn)]
ans = solution(turn,ls)
if ans:print("Valid")
else: print("Invalid")
'알고리즘 문제 풀이 > Javascript' 카테고리의 다른 글
[node.js] 1347 미로만들기 (0) | 2025.01.15 |
---|---|
[node.js] 16507 어두운 건 무서워 (0) | 2025.01.14 |
Javascript(nodejs) 백준 1756 피자 굽기 (0) | 2024.06.03 |
javascript(nodeJS) 백준 14719 빗물 (0) | 2024.05.28 |
Javascript[node.js] 백준 2174 로봇 시뮬레이션 (0) | 2024.05.27 |