코딩테스트 연습

[백준] 8958번 - OX퀴즈 (JAVA)

zzzin 2022. 2. 7. 16:16

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

 

 

예를 들어, "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

 

 

다음 예시와 같이 OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 문제이다.

 

 

 


 

결과 화면 예시

 

 

 

첫번째 줄에서는 총 몇 번의 퀴즈가 있었는지 숫자를 입력받는 것이므로, N변수에 받아 저장해둔다. 그리고 각 퀴즈에서의 점수를 받아 저장할 변수 score배열을 생성한다.

 

 


 

 

 

퀴즈의 갯수 N만큼 돌아가는 반복문을 가장 먼저 생성한 후, 입력받은 퀴즈결과는 X를 기준으로 토큰을 나누어준다. 이렇게 나누어진 총 토큰의 수를 st.countTokens()함수를 통해 cnt에 저장하여 cnt값만큼 반복문을 돌려 점수를 계산한다. 

 


 

 

각 토큰 안에는 "OO" 나 "OOOO" 와 같은 형식으로 값이 저장되어 있으며, O가 연속될수록 점수는 1점씩 올라가지만 X로 끊기면 다시 1점부터로 리셋된다. 이러한 계산을 위해 st.nextToken().length()를 통해 각 토큰의 길이를 구한 후 그만큼 반복문을 돌려 연속된 경우 1점씩 추가된 점수를 score배열에 담아준다.

 

 

이렇게 score배열에 저장된 각 점수들을 출력하면 끝! 

 

 


 

 

정답처리 된 소스코드

 

 

 

 


Today's Comment

 

생각보다 오래걸려서 다 풀고 나서 다른 사람들 풀이를 보니까, 나처럼 3중 for문을 쓴 사람은 한 명도 없고 다 2중 for문 안에 if조건문으로 charAt()함수를 써서 풀었길래 조금 당황했다... 그 많은 풀이 중에 나처럼 푼 사람이 한 명도 없었을 줄은...? 그리고 이 단계 문제 중에 이 문제가 제일 푸는데 오래걸렸던 것 같은데 정답률은 딴 것들보다 훨 높길래 그것도 의아했다. 역시 사람마다 난이도를 다르게 느끼는 것일까? 어쨌든 결과는 나왔고 처리속도도 빠른 편이었으니까 그런가보다 했지만 charAt()은 잘 안써버릇했더니 써야겠다고 떠오르질 않았던 것 같다. 다음에는 이것도 써봐야지???