본문 바로가기

Algorithm

[원티드 쇼미더코드 3회차] A번 신을 모시는 사당

쇼미더코드 출제 문제들이 백준에 올라왔다.

🔗 백준 27210 신을 모시는 사당 https://www.acmicpc.net/problem/27210

 

문제

신을 모시는 사당에는 신을 조각한 돌상 N개가 일렬로 놓여 있다. 각 돌상은 왼쪽 또는 오른쪽을 바라보고 서있다. 창영이는 연속한 몇 개의 돌상에 금칠을 하여 궁극의 깨달음을 얻고자 한다.

궁극의 깨달음을 얻기 위해서는 가능한 한 많은 금색 돌상들이 같은 방향을 바라보아야 한다. 방향이 다른 돌상은 깨달음에 치명적이다. 깨달음의 양은 아래와 같이 정의된다.

| (왼쪽을 바라보는 금색 돌상의 개수) - (오른쪽을 바라보는 금색 돌상의 개수) |

창영이는 궁극의 깨달음을 얻을 수 있을까?


입력

첫째 줄에 돌상의 개수 N이 주어진다.

둘째 줄에 돌상이 나열된 순서대로, 각 돌상이 바라보고 있는 방향이 주어진다. 입력의 편의상 왼쪽은 1, 오른쪽은 2라고 하자.


출력

최대한 많은 깨달음을 얻기 위해 금을 칠하였을 때, 얻을 수 있는 깨달음의 양을 출력한다.


풀이

문제를 잘못 이해했어서 시간을 많이 잡아먹혔다.

이 문제는 연속되는 가장 긴 부분을 찾는 것이 아니라 왼쪽 오른쪽 무관하게 색칠 할 때 가장 점수가 높은걸 찾았어야 했다.

긴 부분만 찾는 바람에 시간을 얼마나 뺏긴건지..

 

나는 왼쪽을 보고있는 돌상부터 색칠할 경우와 오른쪽을 보고있는 돌상부터 색칠할 경우 두가지를 모두 카운팅해줬다.

그리고 그 중에서 최대값을 찾아 출력시켜줬다.

이 쉬운 문제를.. 얼마나... 오래 한건지...😂

 

내가 푼 코드

더보기
import java.io.*;
import java.util.StringTokenizer;

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

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());

        int lCnt = 0, rCnt = 0, max = 0;

        for (int i = 0; i < n; i++) {
            if (st.nextToken().equals("1")) {
                if (rCnt > 0) rCnt--;
                lCnt++;
                max = Math.max(lCnt, max);
            } else {
                if (lCnt > 0) lCnt--;
                rCnt++;
                max = Math.max(rCnt, max);
            }
        }
        System.out.println(max);
    }
}

 

Recent Posts
Popular Posts
Recent Comments