본문 바로가기

건승하고있어요/Java

for문/ 최대값 구하기, shift하기

반응형

알고리즘 문제를 풀면서 나의 부족한 지식을 깨닫고 강의를 듣습니당. 재밌네여.

*최댓값 구하기:
       사용자에게 n개의 숫자를 입력받아 가장 큰 수와 그 수들을 모두 더한 값을 구하라.

가장 중요한 포인트는 sum이라는 변수를 먼저 선언해서 for문을 돌리며 계속 더해주는 것|
마찬가지로 max도 변수를 먼저 선언해서 if문으로 해당 숫자보다 max가 작은 경우 그 숫자를 max로 바꿔준당.

다만 실수를 많이 하는 부분이 있는데, int형 초기화!
int형 초기화를 보통은 0을 많이 넣는데, 이게 가끔 문제를 일으킬 수도 있는거라는거.
예를 들어서 요 코드의 경우 숫자를 입력받는데 만약 입력받은 숫자들이 모두 음수라면 max값은 입력받은 숫자에서 비교가 되지 않고 초기화값인 0이 최대값이 돼 버린다. 그렇기 때문에 무턱대고 0으로 초기화를 하면 아니아니 아니된다. 
여기에선 입력받는 가장 첫번째 값으로 초기화를 해 주었다. 

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
import java.util.Scanner;
 
public class Code01{
 
    public static void main(String[] args} {
        
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int [] data = new int [n];
        for(int i=0 ; i<n ; i++)
            data[i] = scan.nextInt();
 
        int sum = 0;
        int max = data[0];
    
        for(int i=0 ; i<n ; i++){
            sum += data[i];
            if(data[i] > max){
                max = data[i];
            }
        }
 
        System.out.println("더하기 값은 " + sum);
        System.out.println("최대 값은 " + max);
 
    }
}
 
cs


*shift하기:
    n개의 정수를 입력받아 순서대로 배열에 저장한다. 그런 다음 모든 정수들을 한 칸씩 오른쪽으로 shift하라.
    마지막 정수는 배열의 첫 칸으로 이동하라.

쉽게 말하면
[1] [2] [3] [4] [5]
[5] [1] [2] [3] [4]
이렇게 바꾸라는 말!!

선생님이 말씀하셨다.
변수 temp를 선언해서 2를 temp에 넣었다가 3을 temp에 넣었다가 4를 temp에 넣었다가...하는 것보다는
마지막 숫자인 5를 처음에 temp에 넣어두고 한 칸씩 밀어주면 가장 빠르겠쪄?...
여러분 제발 생각을 하시고 코딩을 하시기 바랍니다...부탁입니당? 

라고... 제발 생각하라며 코딩해달라고 당부를 하셨다.

암튼, 그래서 temp를 선언함과 동시에 가장 마지막 숫자일 n-1를 넣어서 초기화 해주고,
다른 숫자들은 for문을 이용해서 한 칸씩 밀어 넣어줬다.
그리고 포문이 끝남과 동시에 temp에 있던 마지막 숫자를 가장 처음인 array[0]=temp로 넣어준다.

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
package Lesson1;
 
import java.util.Scanner;
 
public class Code02Prac {
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        System.out.println("숫자를 입력해주세요");
        int n = scan.nextInt();
        int [] array = new int [n];
        System.out.println(n + "개의 숫자를 입력해주세요");
        for(int i=0 ; i<n ; i++) {
            array[i] = scan.nextInt();
        }
        
        for(int i=0 ; i<n ; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        System.out.println(array[n-1]);
        
        
        int temp= array[n-1];
        
        
        for(int i=n-1 ; i>0 ; i--) {
            array[i] = array[i-1];
            System.out.println(i);
        }
        array[0= temp;
        
        for(int i=0 ; i<n ; i++) {
            System.out.print(array[i] + " ");
        }
    }
 
}
 
cs


반응형