개발자 톡
연습문제 톡
[한양대 HCPC 2023] X marks the Spot
[Javascript] 제출 시 변수 할당 방법에 따라 런타임 에러가 발생합니다.
- 등록일
- 2024-07-01 14:03:08
- 조회수
- 170
- 작성자
- 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