Miyeon

백준 8958번 | OX퀴즈

2021-11-24Algorithm

🔥 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문이 점점 늘어났고, 코드가 길어졌다. 로직이 복잡해지니 어느 순간 아 꼬였다 라는 느낌이 확 들었다.
  • 오늘의 경험을 통해 코드 작성하기 전에 꼭 어떻게 해결할 지 로직을 분명히 하고 시작해야겠다고 다짐했다. 스텝 별로 적지 않고 대충 적었더니 길 잃은 것처럼 코드가 아주 지저분해졌다.
  • 문제를 해결할 수 있는 방법이 많지만 그 중에서 좀 더 간단한 방법을 찾자. 항상 더 간단한 방법이 존재하기 마련이니까!

참고

8958번: OX퀴즈