포트폴리오/백준 알고리즘

[3일차] 백준_17608

taeni-log 2022. 7. 29. 08:38

3일차 알고리즘은 배열과 count 를 활용한 알고리즘 문제이다.

어제 배열로 문제를 결국 해결하지 못해 오늘은 배열로 문제를 해결하자고 다짐하면 문제를 골랐다.

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

주어진 문제의 내용을 이해하기는 쉬웠다.

문제의 예시에서 처럼 오른쪽에 크기 6의 막대가 놓여져 있다면 6보다 큰 막대만 보이게 된다.

따라서 문제에서는 보이는 막대를 구하라는 의미는 6보다 큰 막대기를 구하라는 말이다.

 

어떻게 보면 최대값을 찾는 문제인데, 이 문제를 풀기가 어려웠다.

그 이유는 최대값을 구하는 문제와 달리

이 문제를 풀기 위해서는 바로 i++ (->) 이 아니라 i-- (<-) 로 생각해야 하기 때문이다. 

즉 크다면 1을 더하고 MAX 값을 변경해주면서 가장 왼쪽에 도달해야 하는 문제이다.

 

<실행코드> - JAVA

public
class Main {

          public static void main(String[] args) {
          Scanner sc =new Scanner(System.in); //스캐너 객체 생성
         
                        int co = sc.nextInt();     // 입력 받고자 하는 수의 갯수를 입력 받아 변수에 저장
                        int[] arr = new int[co]; // 입력 받은 정수를 저장할 배열 생성
                       
                        for (int i=0; i<co; i++) {
                                     arr[i] = sc.nextInt();
                        }
               int max = arr[co-1];// co-1인 이유는 i--
               int count = 1;
     for(int i=co-1; i>=0; i--){ // arr 길이 만큼 반복 거꾸로 하기 때문에
                if(arr[i]>max) {// 뽑힌 i가 max보다 크다면
                                   max = arr[i];// max는 뽑힌 i
                            count++; //max보다 큰수를 뽑기
                }
  }
    System.out.println( count );   //보이는 막대의 수
          }
}

처음에 코딩은 철학을 공부하는 것과 같다는 말을 들었을 때 그런가 싶었다.

하지만 알고리즘 문제를 풀면서 보니까 그말이 맞는 것 같다.

논리적으로 생각하는 방법이 동일 한 것 같다.

 

아직은 어렵지만 그래도 문제를 하나하나 해결해 나아가면서 성취감이 느껴져서 너무 재미있다.

아직은 배열을 완벽히 이해하지 못했지만, 어제보다는 조금 더 발전 해 나가는 중이다.

 

'포트폴리오 > 백준 알고리즘' 카테고리의 다른 글

[6일차] 백준 _ 2750  (0) 2022.08.01
[5일차] 백준 class1_1000,1001,1008  (0) 2022.07.31
[4일차] 백준_2875  (0) 2022.07.29
[2일차] 백준 15953  (0) 2022.07.28
[1일차] 백준_2739  (0) 2022.07.27