프로그래밍/코딩테스트

[백준] 1차원 배열 문제집 (완료)

코드몬스터 2023. 8. 4. 16:57
728x90

 

 

자바입니다.

다시 보면 좋은 코드

  • 배열을 뒤집으면서 바꾸는 코드
// 예시)
// [1, 2, 3, 4, 5] => [5, 4, 3, 2, 1]
for (int j=a, k=b; j < k; j++, k--) {
    int temp = answer[j];
    answer[j] = answer[k];
    answer[k] = temp;
}

 

 

  • 배열에서 첫 번째 값부터 뒤지면서 찾는 최대값 최소값
// 상황에 따라 min/max 변수의 값을 초기화 하고
// 모든 변수랑 비교하면서 min/max 변수를 업데이트함.

// 최소값 구하기
int min = numbers[0];
for(int i = 1; i < N; i++) {
    if (numbers[i] < min) {
        min = numbers[i];
    }
}

// 최대값 구하기
int max = numbers[0];
for(int i = 1; i < N; i++) {
    if (numbers[i] > max) {
        max = numbers[i];
    }
}

 

문제집

10807번: 개수 세기 - 브론즈 5

  • chatGPT가 Stream으로 처리한 정답
    (Stream 공부를 해야겠다..)
import java.io.*;
import java.util.*;

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

        int arraySize = Integer.parseInt(br.readLine());
        int[] numbers = Arrays.stream(br.readLine().split(" "))
                              .mapToInt(Integer::parseInt)
                              .toArray();
        int target = Integer.parseInt(br.readLine());

        // 배열을 순회하며 target과 같은 숫자를 카운트
        long count = Arrays.stream(numbers)
                           .filter(num -> num == target)
                           .count();

        // 결과 출력
        bw.write(count + "\n");
            
    }
}

 

  • 내가 푼 정답
import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int firstParam = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int thirdParam = Integer.parseInt(br.readLine());
        int sum = 0;
        for (int i = 0; i < firstParam; i++) {
            int number = Integer.parseInt(st.nextToken());
            if (number == thirdParam) sum++;
        }
        
        
        bw.write(sum + "\n");
        bw.flush();
        
        br.close();
        bw.close();
    }
    
}

 

10871번: X보다 작은 수 - 브론즈 5

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
           
        StringTokenizer st = new StringTokenizer(br.readLine());
       
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        
        for (int i = 0; i < a; i++) {
            int number = Integer.parseInt(st2.nextToken());
            if(number < b) {
                bw.write(number + " ");
            }
        }
        
        bw.write("\n");
        bw.flush();
        
    }
}

 

10818번: 최소, 최대 - 브론즈 3

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        // 정수 배열을 출력
        int[] numbers = new int[N];
        for(int i = 0; i < N; i++) {
            numbers[i] = Integer.parseInt(st.nextToken());
        }
        
        // 최소값 구하기
        int min = numbers[0];
        for(int i = 1; i < N; i++) {
            if (numbers[i] < min) {
                min = numbers[i];
            }
        }
        
        // 최대값 구하기
        int max = numbers[0];
        for(int i = 1; i < N; i++) {
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }
        
        bw.write(min + " " + max + "\n");
        bw.flush();
        
    }
}

 

2562번: 최댓값 - 브론즈 3

import java.util.*;
import java.io.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
            int[] numbers = new int[9];
            for (int i = 0; i < 9; i++) {
                numbers[i] = Integer.parseInt(br.readLine());
            }
        
            int idx = 1;
            int max = numbers[0];
            for(int i = 1; i < 9; i++) {
                if (numbers[i] > max) {
                    max = numbers[i];
                    idx = i + 1;
                }
            }
        
            bw.write(max + "\n");
            bw.write(idx + "\n");
            bw.flush();
    }

}

 

10810번: 공 넣기 - 브론즈 3

※ 문제를 꼼꼼하게 읽어봐야한다 ※

문제: 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.

import java.util.*;
import java.io.*;

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

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] basket = new int[N];
        for (int i = 0; i < M; i++) {
            StringTokenizer st2 = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st2.nextToken());
            int b = Integer.parseInt(st2.nextToken());
            int c = Integer.parseInt(st2.nextToken());
            for (int j = a-1; j <= b-1; j++) {
                basket[j] = c;
            }
        }

        for(int i = 0; i < basket.length; i++) {
            bw.write(basket[i] + " ");
        }

        bw.write("\n");
        bw.flush();
    }
    
}

 

10813번: 공 바꾸기 - 브론즈 2

import java.util.*;
import java.io.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        
        // 01. 배열 만들기
        int[] numbers = new int[N];
        for (int i = 0; i < N; i++) {
            numbers[i] = i + 1;
        }
       
        // 02. 바구니 공 바꾸기
        for (int i = 0; i < M; i++) {
            StringTokenizer st2 = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st2.nextToken()) - 1;
            int b = Integer.parseInt(st2.nextToken()) - 1;
            
            int temp = numbers[a];
            numbers[a] = numbers[b];
            numbers[b] = temp;
            
        }
        
        
       // 03. 정답 작성
       for (int i = 0; i < numbers.length; i++) {
           bw.write(numbers[i] + " ");
       }
       
       bw.write("\n");
       bw.flush();
        
        
    }
    
}

 

5597번: 과제 안 내신 분..? - 브론즈 1

import java.util.*;
import java.io.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        // 01. 배열 만들기
        // 배열의 생성 초기값은 0 이다.
        int[] numbers = new int[30];
        for (int i = 0; i < 28; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            
            numbers[a - 1] = 1;
        }
        
        // 02. 정답
        for (int i = 0; i < 30; i++) {
           if (numbers[i] == 0) {
               bw.write(i + 1 + " ");
           }
        }
        
        bw.flush();
        
        
    }
    
}

 

3052번: 나머지 - 브론즈 2

  • 나머지 값들 중에 중복 체크만 해주면 되서 Set 인터페이스를 사용해보았다.
import java.util.*;
import java.io.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        Set<Integer> numbers = new HashSet<>();
        for (int i = 0; i < 10; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int number = Integer.parseInt(st.nextToken());
            numbers.add(number % 42);
        }
     
        bw.write(numbers.size() + "\n");
        bw.flush();
    }
    
}

 

 

10811번: 바구니 뒤집기 - 브론즈 2

  • 이 놈... 생각보다 고민을 많이 했다...
  • 다른 사람들 블로그를 보면 for 문을 while 문으로 작성해놓았다.
import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        // 배열 생성
        int[] answer = new int[N];
        for (int i = 0; i < N; i++){
            answer[i] = i + 1;
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken()) - 1;
            int b = Integer.parseInt(st.nextToken()) - 1;

            // 1 5 -> 0 4
            // 2 8 -> 1 7
             for (int j=a, k=b; j < k; j++, k--) {
                int temp = answer[j];
                answer[j] = answer[k];
                answer[k] = temp;
            }
        }

        for (int i = 0; i < answer.length; i++) {
            bw.write(answer[i] + " ");
        }

        bw.flush();
        bw.close();
    }
}

 

 

1546번: 평균 - 브론즈 1

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int firstParam = Integer.parseInt(br.readLine());

        // 01. 배열에서 최대값 구하기.
        StringTokenizer st = new StringTokenizer(br.readLine());

        int max = 0;
        int[] numbers = new int[firstParam];
        for (int i = 0; i < firstParam; i++) {
            numbers[i] = Integer.parseInt(st.nextToken());
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }

        // 02. 평균 구하기.
        double sum = 0;
        for (int i = 0; i < firstParam; i++) {
            sum +=  ((double) numbers[i] / max) * 100;
        }

        double average = sum / firstParam;
        
        bw.write(average + "\n");
        bw.flush();

        br.close();
        bw.close();

    }
}

 

11720번: 숫자의 합

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
                 
        int sum = 0;
        int firstParam = Integer.parseInt(br.readLine());
        String[] numbers = br.readLine().split("");
        for (int i = 0; i < firstParam; i++) {
            int secondParam = Integer.parseInt(numbers[i]);
            sum += secondParam;
        }
        
        bw.write(sum + "\n");
        bw.flush();
        
        bw.close();
        br.close();
    }
}