yoon_asha   1년 전

똑같은 코드인데 

const solution = (arr) => {
let a = [1,2,3,4,5,6,7,8]
let b = [8,7,6,5,4,3,2,1]

if(JSON.stringify(arr) === JSON.stringify(a)) return 'ascending'
if(JSON.stringify(arr) === JSON.stringify(b)) return 'descending'
else return 'mixed'
}

console.log(solution(input))

이렇게 하면 정답인데

const solution ~~~~ 이거 안하고 그냥 저렇게 쓰면 틀렸네요

return 대신 console.log 로 해봐도 틀렸다고 나오고... 

혹시 왜 이런건지 설명 가능하신 분 계신가용...

wizardrabbit   1년 전

안녕하세요? 제출하신 코드 중 틀린 두 개의 코드에서 틀린 점을 설명해 드릴게요.

1. return만 한 코드

Link: https://www.acmicpc.net/source...

console.log(solution(input));

형태로 작성해야 정답을 받는 이유는, solution(input)은 return 값을 반환하고, 그 반환한 return 값을 console.log() 로 출력해 주어야 비로소 정답이 출력되기 때문입니다.

단순 return만 사용한 경우는 함수에 대해 값을 반환할 뿐 출력을 하지 않으며, 해당 코드의 경우 함수 블록 바깥에서 return 문을 사용하셨기에 그대로 프로그램이 종료되어 버립니다. 따라서, 아무것도 출력하지 못 하므로 틀리게 됩니다.

2. 직접 출력한 코드

Link: https://www.acmicpc.net/source...

함수에서 return된 값을 출력하는 방법, 조건을 만족할 경우 답을 직접 출력하는 방법 중 어느 쪽을 사용하셔도 무방합니다.

해당 코드가 틀린 원인은, 아래의 조건문에 있습니다:

if(JSON.stringify(input) === JSON.stringify(a)) console.log('ascending')
if(JSON.stringify(input) === JSON.stringify(b)) console.log('descending')
else console.log('mixed')

위의 코드에서는, 'ascending' 과 'mixed' 가 둘 다 출력되는 것이 가능합니다. 이는 해당 조건문이 if, if-else 구문으로 묶여 있기 때문입니다. 입력이 '1 2 3 4 5 6 7 8' 로 주어졌을 경우, 먼저 모든 수가 증가하는 조건을 만족하므로 'ascending' 이 출력되고, 이후 모든 수가 감소하는 조건을 만족하지 않아 else 문에 해당하는 'mixed' 가 또 출력되어 틀리게 됩니다.

return을 사용하는 기존의 코드가 틀리지 않은 이유는, 'ascending', 'descending', 'mixed' 조건 중 어느 하나라도 중간에 만족했을 경우 즉시 해당 함수에서 정답을 return 하고 함수를 종료하기 때문에 답이 무조건 하나만 출력되기 때문입니다.

궁금증이 해결되었기를 바랍니다!

댓글을 작성하려면 로그인해야 합니다.