본문 바로가기

Projects/백준 문제

백준 8958번 자바 문제 OX퀴즈

반응형

 

 

 

문제를 잘못 읽고 OX에서 O의 갯수를 세는 프로그램을 짰다.

 

그런데 그 마저도 완벽하지가 않다.

 

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

이러한 인풋을 넣었을 때, 처음이 영이 나오고, 나머지 4개가 옳게 나온다. 그러니까 처음에 집어넣은 5까지 arraylist화 시켜버린 셈인데, 아직 정확히 왜 그렇게 되는 지 알 수 없다.

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;


public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		String a = null;
		
		
		for(int i=1;i<=N;i++) {
			a = sc.nextLine();
			ArrayList<String> OX = new ArrayList<String>(Arrays.asList(a.split("")));
			
			
			int O_fqc = Collections.frequency(OX, "O");
			System.out.println(O_fqc);
		
				
			}
			
		}

	}

 

 

다른 사람들이 풀어놓은 좀 더 정석적인 방법을 풀어보기로 했다.

 

 

package bj8958;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		
		// 다음 입력될 숫자크기의 리스트를 만든다.
		String arr[] = new String[in.nextInt()];
		
		// 리스트 크기만큼 반복하되,
		// 인덱스가 하나씩 늘어날 때마다 리스트에 값을 추가한다.
		for (int i=0;i<arr.length;i++) {
			arr[i] = in.next();
		}
		
		in.close();	
	
		
		for(int i =0;i<arr.length;i++) {
			int cnt =0; // 연속횟수
			int sum =0; // 누적합산
			
			for (int j=0;j < arr[i].length();j++) {
				
				 if(arr[i].charAt(j) == 'O' ) {
					 cnt++;
					 
				 }
				 else {
					 cnt = 0;
				 }
			
				 sum += cnt;
			}
			
		System.out.println(sum);
			
		}
		}
	

	}

 

반응형