[Step-4] 백준 8958번 OX퀴즈

작성일     업데이트:

카테고리:

태그:

내 풀이

처음엔 주어진 String 값을 chars()로 분리시킨다음 바로 forEach()를 사용하고 그 안에 람다식을 한번 응용해보는 방향으로 가려고 했었다.

br.nextLine().chars().forEach( c -> c.equals('O') ? 지역변수 += 1 : 지역변수 = 0);

하지만 막상 실행해보니 람다식 안에서 바로 지역변수 값이 변경되지 못하고 계속해서 컴파일 오류가 발생하여 결국 람다식 사용은 하지 못했다.
추후 왜 여기서 컴파일 오류가 났고 Java에서 람다식은 어떻게 사용해야하는지 따로 포스팅하여 기록할 예정이다.

람다식을 사용하지 않고 푼 내 풀이는 아래와 같다.

-> for문으로 주어진 문자열 총 갯수만큼 루프를 돌린다
-> 주어진 각 문자열을 split으로 나눠 배열에 담는다
-> for문으로 배열 안의 데이터를 하나씩 꺼내 O일경우 지역변수에 1을 더하고 아닐경우 지역변수 값을 0으로 지정한 후 총합을 구한다

[코드보기]

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int first = Integer.parseInt(br.readLine());
        int n = 0;
        int answer = 0;

        for(int i=0; i < first; i++){
            String[] str = br.readLine().split("");

            for(String ss : str) {
            	if(ss.equals("O")){n += 1;} else {n = 0;}
            	answer+=n;
            }

            System.out.println(answer);
            n = 0;
            answer = 0;
            }
        }
    }


다른사람의 풀이

배열을 사용하지 않고 풀어낸 경우를 발견해 기록해둔다.
여기서는 문자열 자체에 length()를 사용해서 길이를 구한 뒤 for문을 돌며 charAt(i)로 i의 순번째에 있는 문자를 불러와 비교시켰다.

for(int i=0; i<str.length(); i++){
	if(str.charAt(i)=='O'){
		맞을경우
	}else{
		틀릴경우
	}
}

이런식으로 아예 문자열 상 특정 위치에 있는 한글자를 불러올 수도 있는 것과
char 형을 == 로 비교 가능하다는 점(이때 변수는 ""가 아닌 ''로 감싸야만한다!)
꼭 기억해두자

댓글남기기