📌 매일하는것이 제일 중요하다.
📚 학습내용
프로그래밍 문법을 정확히아는 지식보다, 알고있는 문법을 활용해 문제를 반복적으로 해결하다보면 얻어지는 패턴이 존재한다. 이러한 패턴들에 얼마나 내가 익숙하는지와 이를 통해 새로운 문제들을 해결할 수 있게되는 경험이 있다면 잘 할수 있을 것이다.
- 초기 변수값을 무조건 0으로 주게 된다면
초기 변수값을 습관적으로 0으로 대입시켜놓을 텐데 이런 상황에 정수를 입력받아 최대값을 구하는 문제가 발생한다면, 음수를 입력받을 때 0이 최대값으로 나오게 되버린다.
이 때 최초로 입력받는 정수를 초기값으로 준다면 뒤에 입력받을 값들과 자연스럽게 비교가되는 코드를 작성할 수 있을 것이다.
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] data = new int[n];// n개의 정수를 저장할 길이가 n인 배열 선언
for (int i = 0; i < n; i++)
data[i] = kb.nextInt();// 한줄이면 괄호를 안써도 되는구나
kb.close();
int sum = 0;
int max = data[0];// 2.data[0]를 지정해 놓으면 자연스럽게 비교가 가능하다
// - 습관적으로 변수의 초기값을 0으로 만드는 것을 주의하자
for (int i = 0; i < n; i++) {
sum += data[i]; // sum = sum + data[i]
if (data[i] > max) // 1. data가 0보다 작을 때 오류가 생긴다
max = data[i];
}
System.out.println("The sum is " + sum);
System.out.println("The max is " + max);
}
- 생각의 전환
n개의 정수를 입력받아 순서대로 배열에 저장한다.
그런다음 모든 정수들을 한 칸씩 오른쪽으로 shift하라.
마지막 정수는 배열의 첫 칸으로 이동하라.
처음에는 이동 순간마다 임시변수에 저장시켜주며 한칸씩 이동하는 그런 방법이 떠올랐다.
하지만
맨 마지막데이터만 따로 임시변수에 저장 후
for문을 이용해 나머지 변수들을 한칸씩 뒤로 이동시켜준다.
그리고 임시변수에 있는 변수를 0번째로 넣어주면 간단하게 끝낼 수 있다.
습관적으로 하지 말고 조금씩, 아주 조금만 더 생각을 해보면 좋은 코드를 만들어 낼 수 있고 바로 그것이 프로그래머가 필요한 자질이다
int tmp = data[n - 1]; //맨 마지막변수를 tmp에 저장
for (int i = n - 2; i >= 0; i--) { //마지막-1번째 변수부터를 한칸씩 뒤로 이동
data[i + 1] = data[i];
}
data[0] = tmp; //마지막변수를 맨 앞에 대입
Tip) 모든 Class에 main함수가 존재해서 이클립스가 실행해야할 것을 알맞게 실행해 주어야 하는데 가끔 그렇지 않을 때가 존재한다.
Review
- 문제를 해결하며 패턴을 습득하자
- 습득한 패턴에 너무 의존하지 말고 더 쉽고 간단한 방법으로 코드를 만들어보자
'자료구조,알고리즘' 카테고리의 다른 글
[자료구조] Stack (0) | 2023.02.27 |
---|---|
가우스의 등차수열(1.....n까지의 모든 수의 합) (0) | 2021.08.26 |
제1-1장: 변수, 배열, 반복문 (5/7) (0) | 2021.05.21 |
제1-1장: 변수, 배열, 반복문 (3/7) (0) | 2021.05.17 |
제1-1장: 변수, 배열, 반복문 (2/7) (0) | 2021.05.17 |