일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 치지직
- 네이버 치지직
- 소프트웨어분석및설계
- ObservedObject
- 애플 디벨로퍼 아카데미 후기
- react
- sqoop
- ObservableObject
- Swift 문법
- apple developer academy 후기
- OS
- 애플 아카데미 후기
- 애플 디벨로퍼 아카데미 21주차 회고
- 운영체제
- Apple Developer Academy @ POSTECH
- useReducer
- 숭실대
- SWIFT
- 앱 비교 프로젝트
- 데이터베이스 공부
- StateObject
- 애플 디벨로퍼 아카데미
- Swift 디자인패턴
- swift문법
- 제앱소
- global soop
- Swift 기능
- iOS 개발 오류
- 네이버 부스트캠프
- 데이터베이스
- Today
- Total
사과하는 제라스
[백준 BOJ 2562번] 최댓값 본문
목차
출처 : https://www.acmicpc.net/problem/2562
1. 문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
2. 입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
3
29
38
12
57
74
40
85
61
3. 출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
85
8
4. 풀이
입력은 한 줄씩 읽어오기에 간단하게 BufferedReader로만 읽어오면 된다. 입력받은 값은 이전에 풀이한 10818번 문제 풀이와 같이 MIN_VALUE로 최댓값을 고정해두고 이후 for문으로 입력한 데이터들과 비교하며 최댓값을 변경 혹은 유지하면 된다. 이때 추가로 idx라는 변수를 미리 설정해두어 최댓값이 바뀔때 그때의 위치값(index)를 저장해둔다. 출력은 항상 쓰는 1. println() 2. StringBuilder 3. BufferedWriter를 사용하면 된다. 이번 문제에서는 BufferedWriter를 사용해보았다.
다른 방법으로는 입력받은 데이터 배열을 Arrays.sort 함수를 활용하여 정렬한 배열을 하나 만들어서 그 최대값을 이용하는 방법을 사용했다.
5. 소스코드
1. 비교문을 통해서 최댓값 추출
import java.io.*;
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 [] nums = new int [9];
int stnd_Max = Integer.MIN_VALUE;
int idx = 0;
for(int i=0; i<9; i++) {
nums[i] = Integer.parseInt(br.readLine());
if(nums[i] > stnd_Max) {
stnd_Max = nums[i];
idx = i+1;
}
}
bw.write(stnd_Max+"\n"+idx);
bw.flush();
bw.close();
}
}
2. Arrays.sort 함수를 이용하여 정렬 후 최댓값 도출
import java.io.*;
import java.util.*;
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 [] nums = new int [9];
for(int i=0; i<9; i++){
nums[i] = Integer.parseInt(br.readLine());
}
int [] arr_nums = nums.clone();
Arrays.sort(arr_nums);
for(int i=0; i<9; i++){
if(nums[i] == arr_nums[8]) bw.write(arr_nums[8]+"\n"+Integer.toString(i+1));
}
bw.flush();
bw.close();
}
}
6. 배운 것
Arrays 클래스에 있는 sort함수를 사용하면 원하는 배열을 오름차순 or 내림차순으로 정렬을 할 수 있다.
Arrays.sort(nums) -> 오름차순 정렬
Arrays.sort(nums, Collections.reverseOrder()) -> 내림차순 정렬
Arrays.sort(nums, 0, 5) -> 일부분( = [0]~[4]까지만) 정렬
이는 String을 포함한 타 자료형들에도 적용할 수 있다.
추가로, 객체 배열(2개 이상의 정보가 담긴 객체 배열)도 정렬을 할 수 있다.
깊은 복사 vs 얕은 복사
깊은 복사를 통해 아예 서로 다른 인스턴스를 갖는 것이 필요할 때는 Objects.clone()을 사용해서 for문없이 깊은 복사를 간단하게 할 수 있다.
다음 글에서 깊은 복사와 얕은 복사를 할 수 있는 다양한 방법들을 알 수 있다.
https://coding-factory.tistory.com/548
'JAVA 백준 알고리즘 문제풀이 > 1차원 배열' 카테고리의 다른 글
[백준 BOJ 1546번] 평균 (0) | 2022.03.30 |
---|---|
[백준 BOJ 3052번] 나머지 (0) | 2022.03.30 |
[백준 BOJ 2577번] 숫자의 개수 (0) | 2022.03.30 |
[백준 BOJ 10818번] 최소, 최대 (0) | 2021.10.12 |