1. 문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
2.
코드1 (배열 이외의 변수 1개 사용)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] num = new int[9];
int large_num = 0;
for(int i=0;i<9;i++){
num[i]=sc.nextInt();
if(large_num<num[i]) large_num=num[i];
}
System.out.println(large_num);
for(int i=0;i<9;i++){
if(large_num==num[i]) System.out.println(i+1);
}
}
}
배열을 num을 생성하고 배열에 숫자를 입력하면서 입력한 숫자가 기존의 입력한 배열 숫자보다 큰 경우, large_num에 그 값을 저장한다.
새로운 반복문을 만들어 large_num과 같은 값을 가지는 배열의 요소의 index를 찾아 1을 더한 값을 출력한다. (배열의 index는 0부터 시작하기 때문)
코드2 ( 반복문 1개 사용)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] num = new int[9];
int large_num = 0;
int index=0;
for(int i=0;i<9;i++){
num[i]=sc.nextInt();
if(large_num<num[i]) {
large_num=num[i];
index=i+1;
}
}
System.out.println(large_num);
System.out.println(index);
sc.close();
}
}
코드 1 처럼 배열을 num을 생성하고 배열에 숫자를 입력하면서 입력한 숫자가 기존의 입력한 배열 숫자보다 큰 경우, large_num에 그 값을 저장한다. 그리고 index라는 변수에 해당 인덱스 숫자에 1을 더한 값을 저장한다.
3. 비교
반복문을 하나 덜 사용하면 메모리의 크기와 시간이 줄어들 것이라 생각했는데 4KB만 차이가 나고 시간은 동일했다.
이유는 간단하다.
빅오표기법에 따르면 코드 1과 코드 2는 동일하기 때문이다.
4. 링크
https://www.acmicpc.net/problem/2562
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[JAVA] 백준 3053번 : 나머지 (0) | 2020.09.18 |
---|---|
[JAVA] 백준 2577번 : 숫자의 개수 (0) | 2020.08.10 |
[JAVA] 10818번 : 최소, 최대 (0) | 2020.07.30 |
[JAVA] 백준 10996번 : 별찍기 - 21 (0) | 2020.07.25 |
[JAVA] 백준 2446번 : 별찍기 -9 (0) | 2020.07.25 |