2021.11.05 백준 문제풀이
2021.11.05. 백준 문제풀이
1152번 단어의 개수 (Bronze 2)
문제
https://www.acmicpc.net/problem/1152
첫 번째 풀이
1 2 3 4 5 | const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split(" "); console.log(input.length); |
배운 것
86%에서 자꾸 틀려서, 예외 처리가 잘못되었다고 알았다.
어떤 경우인지 정확히 모르겠어서 찾아봤는데, 공백만 입력된 경우를 처리하지 못한 것이었다. 매우 쉬운 문제지만, 정답률이 낮은 이유가 있었다.
예외 처리
1 2 3 | if (input[0] === "") { answer -= 1; } |
나는 이와 같이 예외처리를 해주었다.
해당 문제에 공백이 둘 연속으로 나오지 않는다고 했기 때문에, 전체를 반복문으로 세는 것보다 이것이 더 효율적이라고 생각했다.
2908번 상수 (Bronze 2)
느낀 점
아니 나는 당연히 constant를 말할 줄 알았다.
오늘도 어썸한 개발자 세상
풀이 도중 type 에러가 났었다.
알고보니 newStr 문자열을 상수로 선언해두는 바람에, 새로운 문자열이 들어갈 수 없는 에러였다. 이런걸 보면 나는 아직 브론즈가 맞는데, 오늘 실버로 승급해버렸다. 이건 마치 갓면허 땄을 때의 기분이다.
문제
https://www.acmicpc.net/problem/2908
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
첫 번째 풀이
라인을 입력받고, 두 수를 공백으로 split한 다음 각각 문자열에 reverse() 메서드를 사용한 뒤 숫자로 변환해서 대소 비교를 하자.
! 아이디어
3자리 수인데 배열로 변환, reverse() 사용 후, 다시 join()을 사용하는 것보다 그냥 반복문을 쓰는게 낫지 않을까?
최종 풀이
결국 반복문을 사용해서 풀었다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split(" "); const a = input[0]; const b = input[1]; function reverseStr(str) { let newStr = ""; for (let i = str.length - 1; i >= 0; i--) { newStr = newStr + str[i]; } return newStr; } const newA = parseInt(reverseStr(a)); const newB = parseInt(reverseStr(b)); if (newA > newB) { console.log(newA); } else { console.log(newB); } |