쇼미더코드 출제 문제들이 백준에 올라왔다.
🔗 백준 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);
}
}
'Algorithm' 카테고리의 다른 글
[HackerRank] Forming a Magic Square JAVA (0) | 2023.01.30 |
---|---|
[BaekJoon] 2805 나무자르기 JAVA (0) | 2023.01.18 |
[BaekJoon] 10816 숫자 카드 2 JAVA (0) | 2023.01.17 |
[BaekJoon] 2839 설탕 배달 JAVA (0) | 2023.01.17 |
[BaekJoon] 11651 좌표 정렬하기 2 JAVA (0) | 2023.01.17 |