문제
스탠과 올리는 정수 맞추기 게임을 하고 있다.
스탠은 1과 10사이의 정수 하나를 생각하고, 올리는 스탠이 생각한 수를 맞춰야 한다.
올리가 수를 말할 때마다 스탠은 올리가 말한 수가 큰지, 작은지, 일치하는지를 말해준다.
게임이 몇 번 진행된 후 올리는 스탠이 거짓말을 하고 있다는 생각을 하게 되었다.
즉, 올리는 수를 말할때 마다 스탠이 자신이 생각한 수를 바꿀수도 있다는 생각을 했다.
이런 일이 실제로 벌어지는지 알아내기 위해서,
올리는 게임이 진행되면서 자신이 외친 수와 스탠이 말한 답변을 모두 적어놓았다.
올리가 외친 수와 스탠의 답변이 주어졌을 때, 스탠이 거짓말을 했는지 아닌지 알아내는 프로그램을 작성하시오.
입력
입력은 여러 개의 게임으로 이루어져 있다.
각 게임은 올리가 외친 수와 스탠의 답변으로 이루어져 있으며, 계속해서 번갈아가면서 주어진다.
올리가 외친 수는 1보다 크거나 같고, 10보다 작거나 같은 자연수이고,
스탠의 답변은 "too high", "too low", "right on" 중 하나이다.
"too high"는 올리가 외친 수가 스탠이 생각한 수보다 클 때, "too low"는 작을 때, "right on"은 일치할 때이다.
스탠의 답변이 "right on"이면, 게임이 끝난 것이다.
입력의 마지막 줄에는 0이 주어진다.
출력
각각의 게임에 대해서, 스탠이 거짓말을 한 적이 있다면 "Stan is dishonest"를,
없다면 "Stan may be honest"를 출력한다.
예제 입력 1
10
too high
3
too low
4
too high
2
right on
5
too low
7
too high
6
right on
0
예제 출력 1
Stan is dishonest
Stan may be honest
let fs = require('fs')
let inp = fs.readFileSync('/dev/stdin').toString().split('\n')
let i = 0
let ans = ''
let num = [1,2,3,4,5,6,7,8,9,10]
while(true){
if(inp[i]==='0'){
break;
}
if(isNaN(Number(inp[i])) !== true){
var scale = Number(inp[i])
}else{
if(inp[i] === 'right on'){
if(num.length === 1){
ans += 'Stan may be honest\n'
} else {
ans += 'Stan is dishonest\n'
}
num = [1,2,3,4,5,6,7,8,9,10]
} else if(inp[i] === 'too high'){
num = num.filter((item) => item < scale)
} else if(inp[i] === 'too low'){
num = num.filter((item) => item > scale)
}
}
i++
}
console.log(ans)
이렇게 제출했다
근데 틀렸다고 나왔다
도저히 이해할 수 없다
이리보고 저리봐도 코드에는 문제가 없다
내가 예제 케이스를 만들어서 해봤는데도 제대로된 대답이 나왔다
뭐가 문제인지 알 수 없고 심지어 이 문제는 JS로 푼사람이 단 한사람도 없다
왜 틀렸는지 뭐가 맞는지 알고 싶은데 모르겠어서 너무 답답하다
다른 언어로 푼 내용을 봤을때도 나랑 비슷하게 구현했다
실질적으로 다른점은 크게 없는데 내 코드만 틀렸다고 나왔다
이유가 뭘까,,,,
let fs = require('fs')
let inp = fs.readFileSync('/dev/stdin').toString().split('\n')
let i = 0
let ans = ''
let num = [1,2,3,4,5,6,7,8,9,10]
while(true){
if(inp[i]==='0'){
break;
}
if(isNaN(Number(inp[i])) !== true){
var scale = Number(inp[i])
}else{
if(inp[i] === 'right on'){
if(num.includes(scale)){
ans += 'Stan may be honest\n'
} else {
ans += 'Stan is dishonest\n'
}
num = [1,2,3,4,5,6,7,8,9,10]
} else if(inp[i] === 'too high'){
num = num.filter((item) => item < scale)
} else if(inp[i] === 'too low'){
num = num.filter((item) => item > scale)
}
}
i++
}
console.log(ans)
VS Code로 이렇게 작성을 했었는데 이걸 최신화를 안시키고 제출을 했었다 ㅠㅠ
내 실수 였다
코드가 틀린게 아니었다
휴,,,