캐또's coding

8958 - OX퀴즈 - node.js 본문

기초 공부/백준 문제 풀이

8958 - OX퀴즈 - node.js

JS_K_coding 2022. 8. 18. 11:06

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

예제 입력 1 복사

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

예제 출력 1 복사

10
9
7
55
30

출처

ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Seoul 2005 A번

  • 문제를 번역한 사람: baekjoon
  • 문제의 오타를 찾은 사람: jh82582

알고리즘 분류


OX로 점수를 구하는 문제인데, O면 점수고 X면 0점이다. 첫번째 줄에 주어진 입력 수만큼 케이스가 주어진다. 문제는 O가 연속될 경우 O가 1이 아니라 점점 늘어나야 한다는 점이다. OX면 1점이지만, OOX면 1+2+0으로 3점 이런 식이다.OOXOO면 1+2+0+1+2가 되어 6점이 된다.

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");

const times = Number(input[0]);
let resultScore = 0;
let sumScore = 0;

for (let i = 1; i < times + 1; i++) {
  let arr = input[i].trim().split("");
  for (let i = 0; i <= arr.length; i++) {
    if (arr[i] == "O") {
      sumScore++;
      resultScore = resultScore + sumScore;
    } else if (arr[i] == "X") {
      sumScore = 0;
    }
  }
  console.log(resultScore);
  sumScore = 0;
  resultScore = 0;
}

한글로 메모한 것을 하나하나 그대로 구현하고자 하였다. 

times는 반복할 횟수다. resultScore는 최종 합계로 나올 점수다. sumScore는 연속 정답일 경우 최종 점수에 더해질 점수다.

각 줄의 테스트케이스를 array로 바꾸고 각 array마다 for문으로 돌면서 계산하고자 했다. 각 줄에 대해서 만약 arr의 i번째 요소가 'O'라면 sumScore에 +1을 해준다. 그러면 sumScore는 1이 된다. 그리고나서 resultScore에 sumScore를 더해준다. 다시 돌았을 때 또 'O'가 나왔다면 sumScore에 +1 을 해주고 sumScore는 2가 되어 resultScore에 2점이 더해진다. 이렇게 연속 정답인 경우를 해결했다.

'X'가 나왔을 때는 sumScore를 0으로 바꿔준다. 마지막으로 각 테스트케이스의 반복문을 돌고 나서(전체 아니고 테스트케이스 반복문) resultScore를 출력한 뒤 sumScore와 resultScore를 0으로 리셋해주면 다음 케이스에도 다시 같은 방식으로 문제를 해결한다. 전체 반복문의 경우 0번째 부터가 아니라 1번째 부터이기 때문에 times + 1 을 해줬다.

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

4673 - 셀프 넘버 - node.js  (0) 2022.08.19
4344 - 평균은 넘겠지 - node.js  (0) 2022.08.19
1546 - 평균 - node.js (40번째)  (0) 2022.08.17
3052 - 나머지 - node.js  (0) 2022.08.17
2562 - 최댓값 - node.js  (0) 2022.08.17
Comments