728x90
반응형

Java 문제풀이

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int n, left=1,left_max,right_max, right=1;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        int []a= new int [n];
        
        for(int i=0; i<n;i++){
            a[i] = scanner.nextInt();
        }

        left_max=a[0];
        right_max=a[n-1];

        for(int i=1; i<n;i++){
            if(left_max<a[i]){
                left_max=a[i];
                left ++;
            }
        }


        for(int i=n-2; i>=0;i--){
            if(a[i]>right_max){
                right_max = a[i];
                right++;
            }
        }

        System.out.println(left);
        System.out.println(right);
    

    }
    
}

 

왼쪽 끝(a[0])과 오른쪽 끝(a[n-1])을 각각의 변수에 저장하고 반복문 2개로 왼쪽에서 볼 경우와 오른쪽에서 볼 경우를 구해줍니다.

 

왼쪽에서 볼 경우 left_max의 값보다 큰 값이 나왔을 경우 left++을 해주어 보이는 트로피의 개수를 세어줍니다.

물론 left_max는 처음에 1로 초기화 되어있습니다. 첫번째 트로피는 반드시 보이기 때문입니다.

 

728x90
반응형
728x90
반응형

Java 문제풀이

import java.util.Scanner;

public class b_1439 {
    public static void main(String[] args) {
        String coin;
        int zero=0, one=0,sum_one=0, sum_zero=0;
        Scanner scanner = new Scanner(System.in);

        coin = scanner.next();
        int length = coin.length();

        int []coin_c = new int[length];
        char x;

        for(int i=0; i<length;i++){
            x = coin.charAt(i);
            coin_c[i] = Character.getNumericValue(x);
            if(coin_c[i] == 0){
                zero++;
            }
            else{
                one++;
            }
        }

        for(int i=0;i<length-1;i++){
            if(coin_c[i]==1 && coin_c[i+1]!=1){
                sum_one++;
            }
        }
        if(coin_c[length-1]==1){
            sum_one++;
        }
        
        
        for(int i=0;i<length-1;i++){
            if(coin_c[i]==0 && coin_c[i+1]!=0){
                sum_zero++;
            }
        }
        if(coin_c[length-1]==0){
            sum_zero++;
        }
        
        if(sum_zero>sum_one){
            System.out.println(sum_one);
        }
        else{
            System.out.println(sum_zero);
        }

    }
}

어쩌면 비효율적인 코드라고 생각합니다.

 

1을 뒤집는 방식과, 0을 뒤집는 방식 모두 집계를 하여 그중에서 덜 뒤집은 횟수를 답으로 출력하는 방식입니다.

 

세부기능 코드를 보면, 문자열로 긴 숫자를 입력받고, 그것을 숫자 배열로 변환합니다.

 

이후에는 전체에서 1을 뒤집는 경우와 0을 뒤집는 경우를 집계하는 코드입니다.

 

연속된만큼 뒤집어주는거기 때문에, 1을 뒤집는 경우에서는 숫자 배열을 보고 현재 값이 1이고 다음 배열값이 1이면 아직 마지막 1이 아니기 때문에 넘어가고, 현재값이 1인데 다음값이 0이면 현재가 마지막 1이기 때문에 연속된 만큼 한번 뒤집게 되니 카운트를 ++ 해줍니다. 그리고 마지막 배열 값은 어떤 경우에든 1이면 무조건 카운트 되기 때문에 1이면 카운트 되도록 해주었습니다.

 

0을 집계하는 방식도 마찬가지입니다.

 

그렇게 둘중에서 뒤집는 수가 더 적은것을 출력합니다. 같은경우는 아무거나 출력해도 됩니다.

 

 

결과

728x90
반응형
728x90
반응형

Java 문제풀이

import java.util.Scanner;

public class b_1434{
    public static void main(String[] args) {
        int n,m,x=0, sum=0, box_sum=0;
        Scanner scanner = new Scanner(System.in);
        
        n = scanner.nextInt();
        m = scanner.nextInt();

        int []box = new int [n];
        int []book = new int [m];

        for(int i=0;i<n;i++){
            box[i] = scanner.nextInt();
        }

        for(int i=0;i<m;i++){
            book[i] = scanner.nextInt();
        }

        for(int i=0;i<m;i++){
            while(true){
                if(box[x]<book[i]){
                    x++;
                }
                else{
                    box[x] -= book[i];
                    break;
                }
            }
        }

        for(int i=0;i<n;i++){
            sum += box[i];
        }

        System.out.println(sum);
    }
}

 

for문으로 책 갯수만큼 반복을 돌립니다.

 

while문을 통해 책이 들어갈때까지 반복을 돌립니다.

 

박스에 책이 안들어가면 다음 박스로 넘기고, 들어가면 박스공간에서 책 크기만큼 수를 빼주고 break를 시켜서 다음 책을 넣을 수 있도록 합니다.

 

책을 다 넣었으면 반복문이 끝납니다. 이후에는 남은 박스 공간의 크기를 전부 더하면 됩니다.

 

 

 

 

결과

728x90
반응형
728x90
반응형

Java 문제풀이

import java.util.Scanner;

public class b_11720 {
    public static void main(String[] args) {
        int n,sum=0;
        String x;
        char z;
        Scanner scanner = new Scanner(System.in);

        n = scanner.nextInt();
        x = scanner.next();

        for(int i=0;i<n;i++){
            z = x.charAt(i); //문자열의 값을 하나 뽑아옴
            sum += Character.getNumericValue(z);//char를 int로 변환
            //Integer.parseInt(z); 는 사용할 수 없음.
            //이건 문자열만 변환하는거라 char은 변환못함
            
        }
        System.out.println(sum);
    }
    
}

 

엄청나게 긴 숫자도 계산해야 하므로, 숫자 형태로 받아오는것이 불가능하기 때문에 문자열로 받아와서 끊어서 계산하는 형식의 문제라고 생각합니다.

 

이런 문제를 풀때는 정말 코딩테스트 언어로 파이썬이 편할지도 모르겠다는 생각이 듭니다.

 

문자열에서 각 문자를 뽑아서 연산하는게 불편하긴 하네요..ㅎㅎ 더 좋은 방법이 있을지도 모르겠습니다.

 

 

 

결과

728x90
반응형
728x90
반응형

Java 문제풀이

import java.util.Scanner;

public class b_1145 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int []a = new int [5];
        int x=1;

        for(int i=0;i<5;i++){
            a[i] = scanner.nextInt();
        }

    

        while(true){
            x++;
            int co;

            for(int i=0;i<5;i++){
                co=0;

                if(x%a[0]==0){
                    co++;
                }
                if(x%a[1]==0){
                    co++;
                }
                if(x%a[2]==0){
                    co++;
                }
                if(x%a[3]==0){
                    co++;
                }
                if(x%a[4]==0){
                    co++;
                }
                if(co>2){
                    System.out.println(x);
                    return;
                }
            }

        }

    }
}

 

솔직히 비효율적인 코드라고 생각합니다.

 

x의 값을 1씩 증가시켜서 나머지가 0이 되는 숫자가 3개 이상 나오면, 그 x값을 프린트하도록 만들었습니다.

 

더욱 효율적인 코드를 만들어보려고 했는데, 나름 괜찮아보인다고 생각했지만 틀렸다고 떠서 다음에 도전해봐야겠습니다.

 

 

 

결과

728x90
반응형
728x90
반응형

Java 문제풀이

public class b_5522 {
    public static void main(String[] args) {
        
        int []a = new int[5];
        int sum=0;
        Scanner scanner = new Scanner(System.in);

        for(int i=0;i<5;i++){
            a[i] = scanner.nextInt();
            sum += a[i];
        }
        System.out.println(sum);
        
    }
  }

간단합니다.

 

Scanner로 5개의 수를 입력받는 동시에 숫자를 sum에 더하면 됩니다.

 

 

결과

728x90
반응형

+ Recent posts