코딩테스트/Programmers

표 편집 (JS)

동띵 2025. 1. 5. 15:40

https://school.programmers.co.kr/learn/courses/30/lessons/81303

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

// 인덱스로 계산하되, 해당 인덱스의 위 아래에 있는 애들로 저장
// 각 행을 기준으로 연산이 수행된 후의 위치를 표시

// 삭제 시 삭제한 행의 down을 윗 행의 down에, 삭제한 행의 up을 아래 행의 up에 

// 복구 시 삭제한 행 값을 삭제한 행 윗 행 down과 아래 행 up에

function solution(n, k, cmd) {
    const deleted = []; // 삭제된 행의 인덱스 저장
    const answer = Array(n).fill('O'); // 초기 상태 배열
    
    // 연결 리스트 초기화: 각 행의 위/아래를 저장
    const up = Array.from({ length: n }, (_, i) => i - 1); // i번째 행 위의 행
    const down = Array.from({ length: n }, (_, i) => i + 1); // i번째 행 아래의 행
    down[n - 1] = -1; // 마지막 행 아래는 없음

    let currentIdx = k; // 현재 위치

    for (const command of cmd) {
        if (command.startsWith('C')) {
            // 삭제 명령어
            deleted.push(currentIdx);
            answer[currentIdx] = 'X';
            
            // 연결 갱신
            if (up[currentIdx] !== -1) down[up[currentIdx]] = down[currentIdx];
            if (down[currentIdx] !== -1) up[down[currentIdx]] = up[currentIdx];
            
            // 현재 위치 이동
            currentIdx = down[currentIdx] !== -1 ? down[currentIdx] : up[currentIdx];
        } else if (command.startsWith('Z')) {
            // 복원 명령어
            const restore = deleted.pop();
            answer[restore] = 'O';
            
            // 연결 복원
            if (up[restore] !== -1) down[up[restore]] = restore;
            if (down[restore] !== -1) up[down[restore]] = restore;
        } else {
            // 이동 명령어
            const [direction, steps] = command.split(' ');
            const move = Number(steps);
            for (let i = 0; i < move; i++) {
                currentIdx = direction === 'U' ? up[currentIdx] : down[currentIdx];
            }
        }
    }

    return answer.join('');
}

 

연결리스트와 인덱스를 활용하여 풀었다.

'코딩테스트 > Programmers' 카테고리의 다른 글

베스트 앨범 (JS)  (1) 2025.01.06
오픈 채팅방 (JS)  (1) 2025.01.06
크레인 인형 뽑기 (JS)  (0) 2025.01.05
방문 길이 (JS)  (0) 2025.01.05
실패율 (JS)  (0) 2025.01.05