본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 2750번 자바 문제 답/해설(수 정렬하기 문제)

by 리드민 2022. 1. 11.
반응형

[1] 백준 카테고리
단계별로 풀어보기
정렬

1단계 수 정렬하기

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

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

[2] 문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

1. 입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

2. 출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

3. 예제 입력 1
5

5

2

3

4

1

4. 예제 출력 1
1

2

3

4

5

[3] 정답
1. 정답 해설 미포함

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

public class Main {

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static int[] arr;
	
	public static void main(String[] args) throws IOException {

		
		int N = Integer.parseInt(br.readLine());
		arr = new int[N];
		rePeat(N);
		ascendingValue(N);
		outPut(N);
		
	}
 
	static void rePeat(int N) throws NumberFormatException, IOException {
		
		for(int i=0; i<N; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}
		
	}
	
	static void ascendingValue(int N) {
		for(int i2=0; i2 < arr.length-1; i2++) {
			for(int i3=i2+1; i3<arr.length; i3++) {
				if(arr[i2] > arr [i3]) {
					int temp = arr[i3];
					arr[i3] = arr[i2];
					arr[i2] = temp;
				}
			}
		}
	}
	
	static void outPut(int N) {
		for(int i4=0; i4<N; i4++) {
			System.out.println(arr[i4]);
		}
	}
	
}


2.정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다.
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/

public class Main {
// 접근제어자 public으로 Main 클래스를 선언한다

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	// BufferedReader 객체 br를 선언한다
	static int[] arr;
	// int형 배열 arr를 선언한다.
	
	public static void main(String[] args) throws IOException {
	/* 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 함수를 선언한다.
	예외처리로 IOException를 포함한다.*/
		
		int N = Integer.parseInt(br.readLine());
		// 변수 N에 값을 개행 단위로 구분해서 입력받는다.
		arr = new int[N];
		// 배열 arr의 길의를 선언한다 길이는 N이다.
		rePeat(N);
		// 함수 rePeat(N)를 호출한다.
		ascendingValue(N);
		// 함수 ascendingValue(N)를 호출한다.
		outPut(N);
		// 함수 output(N)를 호출한다.
		
	}
 
	static void rePeat(int N) throws NumberFormatException, IOException {
	// 함수 rePeat를 선언한다.
		for(int i=0; i<N; i++) {
		// for문 선언 i가 0~<N까지 반복
			arr[i] = Integer.parseInt(br.readLine());
			// 변수 arr[i]에 개행으로 값을 입력
		}
		
	}
	
	static void ascendingValue(int N) {
	// 함수 ascendingValue를 선언한다.
		for(int i2=0; i2 < arr.length-1; i2++) {
		// for문을 선언한다. 변수 i2가 0~<arr.length-1 일때 반복된다.
			for(int i3=i2+1; i3<arr.length; i3++) {
			// for문을 선언한다 변수 i3가 i2+1~arr.length 일때 반복된다.
				if(arr[i2] > arr[i3]) {
				// if문 선언 arr[i2]가 arr[i3]보다 클때 괄호 안의 코드가 실행된다.
					int temp = arr[i3];
					// 변수 temp를 선언하고 변수 arr[i3]값을 저장한다.
					arr[i3] = arr[i2];
					// 변수 arr[i3]에 변수 arr[i2] 값을 저장한다.
					arr[i2] = temp;
					// 변수 arr[i2]에 변수 temp에 값 저장
				}
			}
		}
	}
	
	static void outPut(int N) {
	// 메모리에 상주하게 함수 output 선언
		for(int i4=0; i4<N; i4++) {
		// for문 선언 i4가 0~<N까지 괄호안에 코드 반복
			System.out.println(arr[i4]);
			// 변수 arr[i4]에 저장된 값 출력
		}
	}
	
}

수를 여러개 받아서 정렬하는 문제이다.

값을 입력받은 후 정렬 알고리즘을 사용해서 정렬하면 된다. 나는 bubble 알고리즘을 사용하였다.

입력 정렬 출력 부분을 모두 함수로 구분해서 선언한다음 Main 함수에서는 호출하도록 코드를 짰다.

 

	static void ascendingValue(int N) {
		for(int i2=0; i2 < arr.length-1; i2++) {
			for(int i3=i2+1; i3<arr.length; i3++) {
				if(arr[i2] > arr [i3]) {
					int temp = arr[i3];
					arr[i3] = arr[i2];
					arr[i2] = temp;
				}
			}
		}
	}

bubble 알고리즘 부분이다.

앞뒤 값을 계속 비교해서 정렬하게 된다.

 

[4] 결과

반응형