[백준] 8958 (Java)

Yejineer·2021년 1월 19일
1
post-thumbnail

🔍 문제 설명

8958

💻 문제 풀이

8958

source code ←

  • 첫 번째로 입력받은 숫자(n)만큼 do while문을 반복한다.

  • do while문

    • 입력받은 문자열을 char[]형 배열(arr)로 받는다.
    • 문제를 맞은 경우 해당 문제의 점수는 그 문제까지 연속된 O의 개수가 되므로 이전 문제의 점수를 담을 변수(pre)를 만든다.
    • 모든 문제의 점수를 저장할 변수(sum)을 만든다.
    • 두 번째 문제부터 이전 문제의 점수가 영향을 주기 때문에 O/X여부를 판단하기 위한 while문은 arr의 두 번째 요소(arr[1])부터 체크한다. 그러므로 arr[1]부터 시작하기 위해 배열의 인덱스를 나타내기 위한 변수(idx)를 1로 초기화한다.
  • while문

    • arr[idx]가 'O'이면 pre의 값을 하나 증가시키고 sum에 pre값을 더한다.
    • arr[idx]가 'X'이면 pre값을 0으로 초기화한다.

💬 후기

첫 번째 시도에서는 결과가 런타임 에러 (ArrayIndexOutOfBounds)였다.

while문 대신 do while문을 사용하여 arr[1]부터 값을 체크했었는데, 일단 한 번 수행하는 do while문의 특성때문에 arr[0]까지만 존재하는 경우(ex. 'O', 'X')에도 arr[1]을 체크하게 되어 ArrayIndexOutOfBounds에러가 발생한 것이다.

그래서 while문으로 대체하여 arr[0]까지만 존재하는 경우도 처리해주었더니 문제가 해결되었다.

profile
💻 Backend

0개의 댓글