본문 바로가기
Algorithm/백준(BOJ)

백준 4단계 - Java

by k-mozzi 2023. 4. 11.
반응형
Preface

 

4단계는 배열과 관련된 문제들이다.

 

코드의 성능을 조금이라도 향상시키기 위해 모든 입력에 Scanner 대신 BufferedReader를 사용했다.

 

이번 단계에선 원하는 결과가 제대로 출력되지 않아 해결하는데 시간이 꽤나 오래 걸린 문제들이 있었다. (3052번, 10811번 등)

 

어려운 문제가 나왔을 때 구글링을 통해 코드를 본 뒤 이해하는 식으로 넘어가면 문제를 푸는 의미가 없는 것 같아서 혼자 힘으로 꾸역꾸역 어떻게든 정답을 맞춘 후 다른 해결 방법들을 찾아봤다.

 

본문에서 주석처리된 코드들은 다른 블로그나 chat-gpt로부터 얻은 코드들이다.

 

앞으로 점점 더 어려운 문제들을 해결하려면 다양한 메소드를 익혀야 할 것 같다.

 

 

 

아 그리고 정보처리기능사 필기 시험은 무난하게 합격했다.

 

다음달 중에 실기를 접수한 후 6월에 시험을 볼 것 같다.


 

https://www.acmicpc.net/step/6

 

1차원 배열 단계

배열을 활용하여 서로 다른 값의 개수를 찾는 문제

www.acmicpc.net

 

 

- 10807번: 개수 세기

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10807 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];

		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		int V = Integer.parseInt(br.readLine());
		br.close();
		int counter = 0;

		for (int i = 0; i < N; i++) {
			if (arr[i] == V) {
				counter++;
			}
		}

		System.out.println(counter);
	}

}

 

 

- 10871번: X 보다 작은 수

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10871 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt(st.nextToken());
		int X = Integer.parseInt(st.nextToken());

		StringBuilder sb = new StringBuilder();
		st = new StringTokenizer(br.readLine());

		for (int i = 0; i < N; i++) {
			int value = Integer.parseInt(st.nextToken());
			// nextToken을 호출하면 st 변수에서 해당 값이 pop 되는 듯?
			if (value < X) {
				sb.append(value).append(' ');
			}
		}
		System.out.println(sb);
	}

}

 

 

- 10818번: 최소, 최대

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10818 {

	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 minVal = Integer.parseInt(st.nextToken());
		int maxVal = minVal;

		for (int i = 0; i < N-1; i++) {
			int counter = Integer.parseInt(st.nextToken());

			if (counter >= maxVal) {
				maxVal = counter;
			}

			if (counter <= minVal) {
				minVal = counter;
			}
		}
		System.out.println(minVal + " " + maxVal);
	}

}

 

 

- 2562번: 최댓값

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class B2562 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int[] arr = new int[9];
		int max = 0;
		int num = 0;

		for (int i = 0; i < arr.length; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}

		for (int i = 0; i < arr.length; i++) {
			if (max < arr[i]) {
				max = arr[i];
				num = i + 1;
			}
		}

		System.out.println(max);
		System.out.println(num);
	}

}

 

 

- 10810번: 공 넣기

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10810 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int[] arr = new int[N];
		int[] count = new int[3];

		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < 3; j++) {
				count[j] = Integer.parseInt(st.nextToken());
			}
			for (int k = count[0]; k < count[1] + 1; k++) {
				arr[k - 1] = count[2];
			}
		}

		for (int i = 0; i < N; i++) {
			System.out.print(arr[i] + " ");
		}
	}
}


//public class B10810 {
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//
//    StringTokenizer st = new StringTokenizer(br.readLine());
//
//    int N = Integer.parseInt(st.nextToken());
//    int[] arr = new int[N];
//    int M = Integer.parseInt(st.nextToken());
//
//        for (int i = 0; i < M; i++) {
//            st = new StringTokenizer(br.readLine());
//
//            int I = Integer.parseInt(st.nextToken());
//            int J = Integer.parseInt(st.nextToken());
//            int K = Integer.parseInt(st.nextToken());
//
//            for (int j = I-1; j < J; j++) {
//                arr[j] = K;
//            }
//        }
//
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + " ");
//        }
//    }
//}

 

 

- 10813번: 공 바꾸기

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10813 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt(st.nextToken());
		int[] arr = new int[N];
		int M = Integer.parseInt(st.nextToken());
		int[] counter = new int[2];

		for (int i = 0; i < N; i++) {
			arr[i] = i + 1;
		}

		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());

			int I = Integer.parseInt(st.nextToken());
			int J = Integer.parseInt(st.nextToken());

			counter[0] = arr[I - 1];
			counter[1] = arr[J - 1];
			// 굳이 새로운 배열을 생성하지 않고 변수에 첫 번째 값만을 저장해둔 후
			// 두 번째 값에서만 인덱스 값을 이용하면 저장공간을 절약할 수 있다.

			arr[I - 1] = counter[1];
			arr[J - 1] = counter[0];
		}

		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
	}

}

 

 

- 5597번: 과제 안 내신 분..?

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class B5597 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		boolean[] arr = new boolean[31];

		for (int i = 0; i < 28; i++) {
			int n = Integer.parseInt(br.readLine());
			arr[n] = true;
		}

		for (int i = 1; i <= 30; i++) {
			if (!arr[i]) {
				System.out.println(i);
			}
		}

	}

}

 

 

- 3052번: 나머지

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//import java.util.HashSet;

public class B3052 {

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

		boolean[] arr = new boolean[42];
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		for (int i = 0; i < 10; i++) {
			arr[Integer.parseInt(br.readLine()) % 42] = true;
			// 나머지 값 자체를 인덱스로 받으면 중복이 안 생김
			// 배열의 디폴트 값은 false
		}

		int count = 0;
		for (boolean value : arr) {
			if (value) { // value 가 true 라면
				count++;
			}
		}
		System.out.println(count);
	}

}

//public class B3052 {
//	 
//	public static void main(String[] args) throws IOException {
//		
//		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//		HashSet<Integer> h = new HashSet<Integer>();
		// Collection 중 Set의 파생클래스
		// HashSet은 중복되는 원소를 넣을 경우 하나만 저장: 중복원소 허용 안 됨
		// 순서 개념이 없어 Collections.sort() 메소드를 사용할 수 없음
// 
//		
//		for (int i = 0; i < 10; i++) {
//			h.add(Integer.parseInt(br.readLine()) % 42);
//		}
//		
//		System.out.print(h.size());
//	}
//}

→ 참고 블로그: https://st-lab.tistory.com/46

 

[백준] 3052번 : 나머지 - JAVA [자바]

https://www.acmicpc.net/problem/3052 3052번: 나머지 문제 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를

st-lab.tistory.com

 

 

- 10811번: 바구니 뒤집기

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B10811 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt(st.nextToken());
		int[] arr = new int[N];
		int[] reverseArr = new int[N];

		for (int a = 0; a < N; a++) {
			arr[a] = a + 1;
			reverseArr[a] = a + 1;
		}

		int M = Integer.parseInt(st.nextToken());

		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());

			int I = Integer.parseInt(st.nextToken());
			int J = Integer.parseInt(st.nextToken());

			for (int j = J - 1, k = I - 1; j >= I - 1; j--, k++) {
				reverseArr[k] = arr[j];
			}
			for (int z = 0; z < N; z++) {
				arr[z] = reverseArr[z];
			}
		}

		for (int h = 0; h < N; h++) {
			System.out.print(reverseArr[h] + " ");
		}
	}

}

//public class B10811 {
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        StringTokenizer st = new StringTokenizer(br.readLine());
//        
//        int N = Integer.parseInt(st.nextToken());
//        int[] arr = new int[N + 1];
//        for (int i = 1; i <= N; i++) {
//            arr[i] = i;
//        }
//        
//        int M = Integer.parseInt(st.nextToken());
//        while (M-- > 0) { 			M이 0보다 큰 경우 반복하고 한 번 반복할 때마다 1씩 감소
//            st = new StringTokenizer(br.readLine());
//            int i = Integer.parseInt(st.nextToken());
//            int j = Integer.parseInt(st.nextToken());
//            while (i < j) {
//                int temp = arr[i];
//                arr[i] = arr[j];
//                arr[j] = temp;
//                i++; j--;
//            }
//        }
//        
//        for (int i = 1; i <= N; i++) {
//            System.out.print(arr[i] + " ");
//        }
//    }
//}

 

 

- 1546번: 평균

package num4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class B1546 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());
		double[] score = new double[N];

		StringTokenizer st = new StringTokenizer(br.readLine());

		double M = 0;

		for (int i = 0; i < N; i++) {
			score[i] = Integer.parseInt(st.nextToken());
			if (score[i] > M) {
				M = score[i];
			}
		}

		double newScore = 0;
		double sum = 0;

		for (int j = 0; j < N; j++) {
			newScore = score[j] / M * 100;
			sum += newScore;
		}

		double avg = sum / N;

		System.out.println(avg);
	}

}

 

728x90
반응형

'Algorithm > 백준(BOJ)' 카테고리의 다른 글

백준 6단계 - Java  (0) 2023.05.22
백준 5단계 -Java  (2) 2023.04.18
백준 3단계 - Java  (0) 2023.04.02
백준 2단계 - Java  (0) 2023.03.23
백준 1단계 - Java  (0) 2023.03.22

댓글