문제
https://www.acmicpc.net/problem/1152
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
정답
난이도가 쉬워 보였으나, 생각보다 정답 비율이 낮아 의문이 생겼습니다. 처음 접근할 때 input을 받아 split(" ")을 통해 공백을 기준으로 배열을 잘라주고 그 배열의 길이를 출력하면 된다고 생각했습니다.
console.log(input.length);
하지만 주의할 점이 있는데, 공백만 존재할 경우입니다. 아무것도 입력받지 않아도 배열에 공백이 추가되어 1이 출력됩니다. 그래서 첫 번째 요소인 공백일 때의 조건을 추가하여 배열의 길이를 출력해야 합니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split(" ");
let answer = input[0] === "" ? 0 : input.length;
console.log(answer);
메모
- 입력 앞 뒤에 공백이 있을 경우를 생각해 문자열의 앞 뒤 공백을 제거하기 위해 String.trim()을 이용한다.
- 입력값이 만약 ""일 경우, split("")를 하는 과정에서 ""이 추가되기 때문에 조건을 추가한다.
- 조건 (삼항) 연산자: JavaScript에서 세 개의 피연산자를 받는 유일한 연산자이다. 앞에서부터 조건문, 물음표(?), 조건문이 참(truthy)일 경우 실행할 표현식, 콜론(:), 조건문이 거짓(falsy)일 경우 실행할 표현식이 배치된다. 해당 연산자는 if...else문의 대체재로 빈번히 사용된다.
'코딩 테스트' 카테고리의 다른 글
[백준 / Node.js] 25206번: 너의 평점은 (0) | 2024.07.10 |
---|