개발자 톡

연습문제 톡 [한양대 HCPC 2023] X marks the Spot

[Javascript] 제출 시 변수 할당 방법에 따라 런타임 에러가 발생합니다.

등록일
2024-07-01 14:03:08
조회수
30
작성자
gyqls234

.charAt()메서드를 실행해서 단어 T의 특정 문자를 answer에 담을 때 런타임 에러가 발생합니다.

테스트 케이스는 둘 다 동일하게 통과하는데, 제출할 때만 에러 코드에서 런타임 에러가 발생했습니다.


아래 두 코드의 차이점은 for문 밖에서 선언한 idx 변수를 사용하느냐,

for문 내부에 있는 j 변수를 사용하느냐의 차이입니다.


생각해 볼 만한 원인으로는 모종의 이유로

for문보다 아래 코드가 먼저 실행되었고,

idx가 초기화되지 않은 채로 answer += T.charAt(idx);이 동작했다고 생각됩니다.

하지만 코드 내부에서 비동기 통신이라든지 오래 걸리는 동작을 지시한 것도 아닌데 그렇게 비순차적으로 동작할 이유가 있을지 잘 모르겠어서 질문 올립니다.



읽어주셔서 감사합니다.



// 에러 코드

const fs = require('fs');
const input = fs.readFileSync(0).toString().split('\n');

const N = +input[0];

let answer = "";
for(const line of input.slice(1)){
    const words = line.split(' ');
    const S = words[0];
    const T = words[1];

    let idx;
    for(let j = 0; j < S.length; j++){
        const char = S.charAt(j);
        if(char === 'x' || char === 'X'){
            idx = j;
            break;
        }
    }
    answer += T.charAt(idx);
}

console.log(answer.toUpperCase());



// 정답 코드

const fs = require('fs');
const input = fs.readFileSync(0).toString().split('\n');

const N = +input[0];

let answer = "";
for(const line of input.slice(1)){
    const words = line.split(' ');
    const S = words[0];
    const T = words[1];

    for(let j = 0; j < S.length; j++){
        const char = S.charAt(j);
        if(char === 'x' || char === 'X'){
            answer += T.charAt(j);
            break;
        }
    }
}

console.log(answer.toUpperCase());


#[한양대_HCPC_2023]_X_marks_the_Spot

이 카테고리의 톡 더보기