https://www.acmicpc.net/problem/2480
1. 코드
const [a, b, c] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(i=>+i);
let result;
if(a===b){
if(b===c){
// a=b=c
result = 10000+a*1000;
}
else if(b!==c){
// a=b
result = 1000+a*100;
}
} else if(a!==b){
if(b===c){
// b=c
result = 1000+b*100;
}
else if(b!==c){
if(c===a){
// a=c
result = 1000+a*100;
}
else if(c!==a){
// 다 다름
if(a>b){
if(b>c){
result = a*100;
}
else if(b<c){
if(a>c){
result = a*100;
}
else if(a<c){
result = c*100;
}
}
}
else if(a<b){
// 다 다름
if(b>c){
result = b*100;
} else if(b<c){
result = c*100;
}
}
}
}
}
console.log(result);
2. 다른 코드
const [a, b, c] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(i=>+i);
if (a === b && b === c && a === c) { console.log(10000 + a * 1000) };
else if (a !== b || b !== c || c !== a) {
if (a === b || a === c) { console.log(1000 + a * 100) };
if (b === c) { console.log(1000 + b * 100) };
}
else if(a !== b && b !== c && c !== a){
console.log([a,b,c].sort().reverse()[0]*100)
}
- 모든 경우를 다 정의해줄 필요 없이, 논리연산자를 통해 코드를 줄일 수 있었다.
- 배열.sort() 메서드를 통해 작은 숫자부터 큰 숫자로 배열 내부 숫자의 순서를 바꿀 수 있으며, reverse()를 통해 큰 숫자부터 작은 숫자로 배열 내부 숫자의 순서를 변경 가능했다.
- 필요 없는 코드도 있어보인다. 첫번째 else if 문의 마지막인 c!==a 조건식의 참거짓을 따지려면 앞의 두 조건이 다 false여야하는데, 그러면 a===b, b===c 이므로 이미 두번째 줄의 조건식에 걸리지 않았을까 싶다.
const [a,b,c] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(i=>+i);
if (a === b && a === c){
console.log(10000+a*1000);
}
else{
if (a === b || a === c){
console.log(1000 + a*100);
}
else if (b === c){
console.log(1000 + b*100);
}
else{
console.log(Math.max(a,b,c)*100);
}
}
- Math.max로 숫자들 중 가장 큰 숫자를 골라낼 수 있다.
- !== 연산자를 사용하면 이해하기 어려웠지만, 이 코드에서는 === 를 사용해서 훨씬 직관적으로 잘 이해가 됐다.
'기타 > 알고리즘(백준)' 카테고리의 다른 글
[JS] 백준 3052번 나머지 (배열 중복 요소 제거 방법 세 가지) (0) | 2022.09.29 |
---|---|
[JS] 백준 1110번 더하기 사이클 (0) | 2022.09.25 |
[JS] 백준 2525번 오븐 시계 (0) | 2022.09.21 |
[자바스크립트] 백준 10172번 '개' (0) | 2022.01.14 |
[자바스크립트] 백준 10701번 고양이 (1) | 2022.01.14 |