백준
백준 닷컴 단계 별로 풀어보기 4단계
CD가참둥그렇다
2023. 9. 19. 15:00
1단계 개수 세기
- 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.
- 첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.
import java.util.Iterator;
import java.util.Scanner;
public class Step_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int[] Array1 = new int[length];
for (int i=0; i<length; i++) {
Array1[i] = scan.nextInt();
}
int a =0, b=scan.nextInt();
for (int i = 0; i<length; i++) {
if (Array1[i]==b) {
a++;
}
}
System.out.println(a);
}
}
A.
- int length를 선언하고 첫 int로 초기화한다.
- int[] Array1 = new int [length]를 이용해 길이가 지정된 기본 값의 배열을 생성해준다.
- for문을 이용해 배열에 각 int를 대입해준다.
- int a와 b를 선언하고 a에는 0, b에는 입력된 int를 부여하고 초기화한다.
- for문을 만들고 b와 Array1[i]가 같은 경우 a에 1을 더해주는 증감자를 적용하는 반복문을 만든다.
- 반복문을 완료한 뒤 a를 출력하면 주어진 정수 v와 같은 배열의 내용물의 개수를 출력할 수 있다.
2단계 X보다 작은 수
- 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
- 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
- X보다 작은 수를 입력 받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.
import java.util.Scanner;
public class Step_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int a = scan.nextInt();
int[] Array1 = new int[length];
for (int i = 0; i < length; i++) {
Array1[i] = scan.nextInt();
}
for (int i = 0; i < length; i++) {
if (Array1[i] < a) {
System.out.print(Array1[i] + " ");
}
}
}
}
A.
- int length를 선언하고 첫 int로 초기화한다.
- int a를 선언하고 비교할 정수 X를 받아준다.
- int[] Array1 = new int [length]를 이용해 길이가 지정된 기본 값의 배열을 생성해준다.
- for문을 이용해 배열에 각 int를 대입해준다.
- for문을 만들고 Array1[i]가 a보다 작은 경우 Array[i]와 빈칸을 출력하도록 한다.
3단계 최소, 최대
- 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
- 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
import java.util.Scanner;
public class Step_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int[] Array1 = new int[length];
for (int i = 0; i < length; i++) {
Array1[i] = scan.nextInt();
}
int a = Array1[0];
for (int i = 0; i < length; i++) {
if (Array1[i] < a) {
a = Array1[i];
}
}
int b = Array1[0];
for (int i = 0; i < length; i++) {
if (Array1[i] > b) {
b = Array1[i];
}
}
System.out.print(a + " " + b);
}
}
A.
- int length를 선언하고 첫 int로 초기화한다.
- int[] Array1 = new int [length]를 이용해 길이가 지정된 기본 값의 배열을 생성해준다.
- for문을 이용해 배열에 각 int를 대입해준다.
- int a를 선언하고 배열의 첫 int를 대입한다.
- for문을 만들고 Array1[i]가 a보다 작은 경우 a에 Array1[i]를 대입하는 반복문을 만든다
- int b를 선언하고 배열의 첫 int를 대입한다.
- for문을 만들고 Array1[i]가 a보다 큰 경우 a에 Array1[i]를 대입하는 반복문을 만든다
- print (a + “ ” + b)로 결과를 출력한다.
4단계 최댓값
- 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
- 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수 인지를 출력한다.
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] Array1 = new int[9];
for (int i = 0; i < 9; i++) {
Array1[i] = scan.nextInt();
}
int a, b;
a = Array1[0];
b = 1;
for (int i = 0; i < 9; i++) {
if (Array1[i] > a) {
a = Array1[i];
b = i+1;
}
}
System.out.println(a);
System.out.println(b);
}
}
A.
- 배열을 선언하고 길이가 9인 기본 값의 배열로 초기화 시킨다.
- Array1[]에 각각 int를 대입한다.
- int a, b를 선언한다. a에는 배열의 첫 int로, b에는 1로 초기화 시킨다.
- for문을 만들어주고 9번 반복하도록 만든다.
- Array1[i]와 a를 비교하고, Array[i]가 a보다 크다면 a는 Array[i], b는 i+1로 대입한다. i는 0부터 세기 때문에 1을 더해야 우리가 세는 방식이 된다.
- a와 b를 출력한다.
5단계 공 넣기
- 첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
- 둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다.
- 도현이는 입력으로 주어진 순서대로 공을 넣는다.
- 1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.
import java.util.Scanner;
public class Step_5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int ball = scan.nextInt();
int[] Array1 = new int[length];
for (int i = 0; i < ball; i++) {
int a, b, c;
a = scan.nextInt()-1;
b = scan.nextInt()-1;
c = scan.nextInt();
for (int j = a; j<=b; j++) {
Array1[j] = c;
}
}
for (int i = 0; i < length; i++) {
System.out.print(Array1[i]);
}
}
}
A.
- int length와 ball을 선언하고 각각 nextint 로 초기화 한다.
- 배열 Array1을 선언하고 길이가 length인 기본 값인 배열로 초기화한다.
- for문을 열고 ball만큼 반복되는 반복문을 작성한다.
- int a, b, c를 선언하고 각각 nextint로 초기화한다.
- a, b의 값은 바구니의 번호인데 배열에서의 바구니는 Array1[실제 바구니 번호-1]에 담기있기 때문에 a, b에 -1을 추가한다. 또는 이하 for문에서 Array[j-1]로 작성한다.
- for문을 만들고 a~b까지 b를 포함하도록 반복문을 만들고, Array1[j]에 c를 대입한다.
- for문을 만들어 배열의 각 int를 출력하는 반복문을 작성한다.
6단계 공 바꾸기
- 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
- 도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.
- 둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 들어있는 공을 교환한다는 뜻이다. (1 ≤ i ≤ j ≤ N)
- 1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int ball = scan.nextInt();
int[] Array1 = new int[length];
for (int i=0; i<length; i++) {
Array1[i] = i+1;
}
for (int i = 0; i < ball; i++) {
int a, b, c;
a = scan.nextInt()-1;
b = scan.nextInt()-1;
c = Array1[a];
Array1[a] = Array1[b];
Array1[b] = c;
}
for (int i = 0; i < length; i++) {
System.out.print(Array1[i]+" ");
}
}
}
A.
- int length와 ball을 선언하고 각각 nextint 로 초기화 한다.
- 배열 Array1을 선언하고 길이가 length인 기본 값인 배열로 초기화한다.
- for문을 작성하고 각 배열에 1~length의 값을 대입한다.
- for문을 열고 ball만큼 반복되는 반복문을 작성한다.
- int a, b, c를 선언하고 a, b를 nextint로 초기화한다.
- a, b의 값은 바구니의 번호인데 배열에서의 바구니는 Array1[실제 바구니 번호-1]에 담겨있기 때문에 a, b에 -1을 추가한다.
- c는 배열 내용물 교환을 위한 Array1[a]의 값을 임시로 담아둔다.
- Array1[a] = Array1[b]로 Array1[a]를 바꾸고 Array1[b]는 c의 값을 부여한다.
- for문을 만들어 배열의 각 int를 출력하는 반복문을 작성한다.
7단계 과제 안 내신 분..?
- 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.
- 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] Array1 = new int[30];
for (int i = 0; i < 28; i++) {
Array1[scan.nextInt()-1] = 1;
}
int a=0, b=0;
for (int i = 0; i < 30; i++) {
if (Array1[i] == 0&&a==0) {
a = i+1;
}
if (Array1[i]==0&&a!=0) {
b= i+1;
}
}
if (a < b) {
System.out.println(a);
System.out.println(b);
} else {
System.out.println(b);
System.out.println(a);
}
}
}
A.
- Array1 배열은 선언하고 길이가 30인 기본 값의 배열로 초기화한다.
- for문을 만들고 Array[scan.nextInt()-1] = 1로 대입하는 반복문을 만들고 28번 반복한다.
- int a, b를 선언하고 0으로 초기화한다.
- 반복문을 만들고 조건문을 내부에 만든다. Array1[i]가 0이고 a가 0인 경우 a에 i+1을 붙여넣는다.
- Array1[i]가 0이고 a가 0이 아닌 경우 b에 i+1을 붙여넣는다.
- a와 b의 크기를 비교해 작은 숫자를 우선적으로 출력하는 조건문을 만든다.
8단계 나머지
- 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
- 첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
import java.util.Scanner;
public class Step_8 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] Arr1 = new int[10];
for (int i = 0; i < 10; i++) {
Arr1[i] = scan.nextInt()%42;
}
int[] Arr2 = Arr1;
for (int i = 0; i<10; i++) {
for (int j = 0; j < i; j++) {
if (Arr1[i] == Arr1[j]) {
Arr2[i]=42;
}
}
}
int a=0;
for (int i = 0; i<10; i++) {
if (Arr2[i] == 42) {
a++;
}
}
System.out.println(10-a);
}
}
A.
- Arr1 배열은 선언하고 길이가 10인 기본 값의 배열로 초기화한다.
- for문을 만들고 Arr1에 입력 받은 값을 42로 나눈 나머지를 대입한다.
- Arr2[] 배열을 선언하고 Arr1의 값을 대입한ㄷ.
- for문을 2개 겹쳐서 Arr1[i]와 Arr1[j]를 비교하여 같다면 Arr2에 42의 값을 대입한다.
- int a를 선언하고 0으로 초기화한다.
- Arr2의 값 중 42와 같은 값을 찾으면 a에 증감자를 적용하는 반복문을 적용한다.
- 중복된 배열이 a개 있기 때문에 10-a만큼의 중복되지 않은 배열이 있음을 출력한다.
9단계 바구니 뒤집기
- 첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
- 둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
- 모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
import java.util.Scanner;
public class Step_9 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length, test;
length=scan.nextInt();
test=scan.nextInt();
int[] Arr1 = new int[length];
for (int i = 0; i < length; i++) {
Arr1[i] = i+1;
}
int a, b;
for (int i = 0; i<test; i++) {
a=scan.nextInt()-1;
b=scan.nextInt()-1;
int[] Arr2 = new int[length];
for (int j = a; j<=b; j++) {
Arr2[j] = Arr1[b-j+a];
}
for (int j = a; j<=b; j++) {
Arr1[j] = Arr2[j];
}
}
for (int i=0; i<length; i++) {
System.out.print(Arr1[i]+" ");
}
}
}
A.
- int length, test로 선언하고 첫 줄의 정수로 초기화한다.
- 배열 Arr1을 선언하고 for문을 통해 각 배열에 번호를 넣어준다.
- 서로 바꿀 범위에 해당하는 정수를 받기 위해 int a, b를 선언한다.
- 테스트 회수 만큼의 반복문을 만든다.
- 서로 바꿀 범위를 받고 배열에 투입하기 위해 -1을 한 상태로 a, b에 대입하여 초기화한다.
- 임시로 사용할 배열 Arr2를 선언하고 기본 값으로 초기화한다.
- Arr1의 a~b까지의 배열을 Arr2의 b~a까지에 대입하는 반복문을 작성한다.
- Arr2에 a~b까지의 배열을 Arr1의 a~b까지에 대입하는 반복문을 작성한다.
- 배열의 각 항목을 출력하는 반복문을 만든다.
10단계 평균
- 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
- 세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
- 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
import java.util.Scanner;
public class Step_10 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length;
length=scan.nextInt();
double[] Arr1 = new double[length];
for (int i = 0; i < length; i++) {
Arr1[i] = scan.nextInt();
}
double max = 0;
for (int i = 0; i < length; i++) {
if (Arr1[i] > max) {
max = Arr1[i];
}
}
for (int i = 0; i < length; i++) {
Arr1[i] = Arr1[i]*100/max;
}
double sum =0;
for (int i = 0; i < length; i++) {
sum += Arr1[i];
}
System.out.println(sum/length);
}
}
A.
- int length를 선언하고 첫 입력을 받아온다.
- 평균의 오차 범위가 소수점이기 때문에 double 배열을 선언하고 기본 값으로 초기화한다.
- for문을 만들고 배열에 입력 값을 대입한다.
- 최대 값을 담아둘 double max를 선언하고 0으로 초기화한다.
- for문을 통해 max에 최대 값을 대입하는 반복문을 만든다.
- for문을 만들고 배열의 각 값을 *100/max 상태로 대입하는 반복문을 만든다.
- 점수 합을 담을 double sum을 선언하고 0으로 초기화한다.
- for문을 만들고 sum에 각 배열의 값을 더해주는 반복문을 만든다.
- 합을 과목 수로 나누어 출력한다.