[BOJ1668/JAVA] 트로피 진열

[BOJ1668/JAVA] 트로피 진열

https://www.acmicpc.net/problem/1668

문제

문제는 쉽다고 느껴졌다. 근데 예제 입력하면 계속해서 답이 다르게 나오는 오류가...

풀이

나는 처음에 배열에서 가장 큰 값의 인덱스를 구해서 왼쪽에서 인덱스만큼 세주고, 오른쪽에서 인덱스만큼 세주는 것을 생각했다.

하지만 이럴 경우 예제입력2와 같이 같은 높이의 트로피를 만났을 때 오류가 생긴다.

그리고 두번째 방법으로 같은 높이의 트로피를 만났을 때 세주지 않고 continue하는 것을 추가..

하지만 또 오류...

그리고 세번째 방법으로 배열의 첫번째 요소를 가지고 계속 비교해서 작으면 ++해주는 것을 생각했다.

하지만 이것도 앞에 큰 트로피가 있으면 세주면 안된다.

삽질을 개많이 하다가 아래와 같이 해결하였다.

1. 배열의 첫번째 원소를 temp변수에 저장.

2. temp랑 배열의 원소랑 비교를 해서 작으면 ++

3. 이때 배열의 원소가 더 크면 temp변수에 넣어준다.

4. 왼쪽, 오른쪽 다르게 for문을 돌려주면서 세준다.

핵심은 temp를 가장 큰 높이로 계속 바꾸어줘야한다.

그래야 큰 트로피에 가려진 자신보다 큰 원소를 ++안해준다.

난 빡대갈인거 또 인정해부렸다.

언제쯤 잘할래 ~~ 아래는 겨우겨우 맞은 코드.

코드

import java.util.Scanner; public class BOJ1668 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int total = sc.nextInt(); // 트로피의 개수 int [] num=new int[total]; // 트로피의 높이 for(int i=0;i=0;i--) { if(temp

from http://silvergal.tistory.com/71 by ccl(A) rewrite - 2021-12-05 18:27:28