주관적으로 평가하자면 어려웠다. 근데 누군가는 아주 간단한 문제다! 라고 포스팅을 하였다. 내 지능이 의심스럽다.
머... 코딩 못하는 거 몰랐던것도 아니고 논리를 이해하지 못하는걸까? 다시 한번 살펴보자.
Error 01 : 개행문자 문제
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
String [] strOX=new String [n];
for(int i=0;i<n;i++){
strOX[i]=sc.nextLine();
}
sc.close(); // 입출력이 끝나면 sc.close()
nextLine으로 문자열을 입력받으면 안된다.
테스트케이스의 수를 읽을 때 썼던 nextInt()는 정수'만' 읽어온다. 마지막 개행문자를 제거하지 않는다.
정수 뒤에 있는 개행문자를 읽지 않고 남겨두기 때문에
nextLine()으로 문자열을 입력받을 때는 남겨졌던 개행문자를 하나 읽고 한 줄이 끝난것으로 본다. 공백이 저장되는 것.
따라서 값을 제대로 읽어오지 못한다.
nextLine()이 아니라 next()로 읽어와야한다.
next() - 공백을 기준으로 한 단어 또는 한 문자씩 입력받는다. - 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽음. 그래서 개행 문자를 가져오지 않는다.
nextLine() - 문자 또는 문장 한 라인 전체를 입력받는다. - 버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.
strOX[0], strOX[3을 출력한 모습 오른쪽은 보다시피 4개의 OX 문자열을 입력받아야 했지만 개행문자까지 포함되어 "OOOOOOO"까지만 받고 종료하였다. 또 왼쪽은 0번째가 개행문자가 저장되어 (아무것도 보이지 않지만) 출력되었다.
개행문자를 처리하는 다른 다양한 방법이 있지만 여기서는 next()로 문자열을 받아옴으로써 해결하였다.
Error 02 : 초기화
내 지능이 의심되었던 부분이다.
초기화가 필요했다는 건 알았다.
근데 그 위치가 어디인지 고민을 했다.
대체 왜일까???
for문에 대한 이해가 부족해서 그런게 아닐까 싶다.
하나의 문자열에 대한 처리가 끝나고
다음 문자열에 대하여 접근할 때
초기화를 해줘야 한다.
그래야 이전에 계산했던 count나 sum값이 누적되지 않는다.
Code
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
String [] strOX=new String [n];
for(int i=0;i<n;i++){
strOX[i]=sc.next();
}
sc.close(); // 입출력이 끝나면 sc.close()
for(int i=0;i<strOX.length;i++){
int count=0;
int sum=0;
for(int j=0;j<strOX[i].length();j++){ // 문자열 요소 하나씩 접근
if(strOX[i].charAt(j)=='O'){ // O라면
count+=1;
}else{ // X 라면
//카운트 초기화
count=0;
continue;
}
sum+=count;
}
System.out.println(sum);
}
}
}