자료구조&알고리즘/코딩테스트

백준2562번/최댓값/배열(java)

밍풀 2022. 8. 14. 12:29

*문제 잘못이해하고 최대 최소 둘다 찾는거로 착각함........................................ㅠ

 

max 값을 for문 안에서 선언하고 밖에서 출력하려는데 cannot be resolve to a variable 이라는 오류가 나왔다.

변수의 범위가 중괄호로 제한 되며 밖에서는 호출 불가능 하다는걸 알게 되었다.

 

그리고 최대최소값을 찾을때 최솟값에서 if 가 아닌 습관적으로 else if 를 넣었음... 최솟값이 나오질 않았다.

다시 생각해보니 위의 max < n[i] 조건이 충족되지 않을때만 밑에가 실행되니까... 안됬던것.....

else if 로 하면

처음에는 무조건, max가 0이라서 max < n[0] 조건 충족 하므로 밑에  i=0일땐 min > n[0]의 조건문 실행되지 않음

그러므로 첫번째 배열의 숫자 n[0]가 최솟값일 경우 오류 발생

 

근데 저방법은 계속 비교해야 하니까 비효율적일 수 도 있겠다는 생각이 듦

위에서 더 큰 값을 찾았다는건 당연 최솟값일 수가 없는데 밑에서 다시 비교하니까..... 

큰값을 찾지 않았을때만 min과 비교하는게 어떨가 란 생각을 함

그래서 else if 사용해서 수정

몇번째 수 인지 찾는거를 안했다는것을 알고 그냥

최대랑 최소 둘다 찾고 둘다 몇번째수인지 출력하는 프로그램으로 변경함..ㅎ

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
32
33
34
35
36
37
38
39
40
41
42
package myapp;
import java.util.Scanner;
public class bakj5 {
    //9개의 숫자를 받아 최대값과 최솟값 그리고 몇번째 수인지 출력
    public static void main(String[] args) {
        
    Scanner sc = new Scanner(System.in);
    
    int n[] = new int [9];
    
    for(int i=0;i<9;i++) {    
    n[i] = sc.nextInt();
    }
    sc.close();
    
    int max = n[0];
    int min = n[0];
    int indexmax = 0;
    int indexmin = 0;
    for(int i=1;i<9;i++) {
        
     if(max < n[i]) {
        max = n[i];    
        indexmax = i+1;
        }
     
     else if(min > n[i]) {
         min = n[i];
         indexmin = i+1;
        }
     else indexmin = 1;
    }
    System.out.println("max:"+max);
    System.out.println("max index:"+indexmax);
    System.out.println("min:"+min);
    System.out.println("min index:"+indexmin);
    
       }
 
    }
 
 
cs