백준 8958번 | OX퀴즈
🔥 OX퀴즈 🔥
문제
“OOXXOXXOOO”와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
“OOXXOXXOOO”의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력
각 테스트 케이스마다 점수를 출력한다.
let fs = require("fs");
let input = fs
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
let num = Number(input[0]);
for (let i = 1; i <= num; i++) {
let count = 0;
let sum = 0;
for (let j = 0; j < input[i].length; j++) {
if (input[i][j] === "O") {
count++;
} else {
count = 0;
}
sum += count;
}
console.log(sum);
}
WILT : What I Learned Today 🤔
- 문제를 너무 어렵게 풀려고 하다보니 긴 시간 삽질을 해서 결국 다른 사람이 쓴 코드의 도움을 받아서 풀었다.
- 내가 특히 헤매던 부분은 “O”이 연속되는 걸 어떻게 알지 하는 부분이었다.
count변수
로 관리하면 이리 쉬운데! 그 생각을 못하고 이전 값과 현재 값을 비교해서 해결하려고 했다. 그러다보니 if문이 점점 늘어났고, 코드가 길어졌다. 로직이 복잡해지니 어느 순간 아 꼬였다 라는 느낌이 확 들었다. - 오늘의 경험을 통해 코드 작성하기 전에 꼭 어떻게 해결할 지 로직을 분명히 하고 시작해야겠다고 다짐했다. 스텝 별로 적지 않고 대충 적었더니 길 잃은 것처럼 코드가 아주 지저분해졌다.
- 문제를 해결할 수 있는 방법이 많지만 그 중에서 좀 더 간단한 방법을 찾자. 항상 더 간단한 방법이 존재하기 마련이니까!