백준 2750 자바 코딩테스트

백준 2750 자바 코딩테스트

작성일 2024.02.26댓글 1건
    게시물 수정 , 삭제는 로그인 필요


문제는 위의 사진과 같습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class practice {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] A = new int[N];
        int num = 0;
        for (int i = 0; i < N; i++) A[i] = sc.nextInt();
        for (int i = 1; i < N; i++) {
            int key = A[i];
            for (int j = i - 1; j >= 0; j--) {
                if (A[i] == 1) System.out.printf("%d", j);
                if (A[j] > A[i]) {
                    A[j + 1] = A[j];
                    num = j;
                } else {
                    num = j+1;
                    break;
                }
            }
            if (num == 0) A[0] = key;
            else A[num] = key;
        }
//        for (int i = 0; i < N; i++) System.out.println(A[i]);
    }
}

코드를 이렇게 작성했는데 주석을 지우면 결과값이 23415 가 나옵니다.
if문을 이용하여 보니깐 A[i]의 값이 1일 때, j가 3에서 멈추는걸 확인했으나 오류를 고치지 못하고 있는 상태입니다. 왜 A[i]가 1일 때, j가 3에서 멈추는지 이유를 알려주시면 감사하겠습니다 ㅠㅠ

아무리 분석을 해봐도 이유를 모르겠네요..

 if (A[j] > A[i]) {
                    A[j + 1] = A[j];
                    num = j;
                } else {
                    num = j+1;
                    break;
                }
이 부분에서 A[i]를 key로 고치면 결과값이 제대로 나온던데 A[i]를 key로 고치면 왜 제대로 작동하나요?


#백준 2750 #백준 2750 파이썬 #백준 2750 자바 #백준 2750 c++ #백준 2750 c언어 #백준 2750번 파이썬 #백준 2750 js

profile_image 익명 작성일 -

문제가 되는 부분을 확인해 보니, 입력 배열 A의 값을 직접 비교 및 변경하고 있기 때문에 문제가 발생하는 것으로 보입니다.

삽입 정렬 알고리즘에서는 현재 위치의 값을 임시 변수에 저장한 후, 그 값이 들어갈 위치를 찾아가며 비교를 수행합니다. 이때 원본 배열의 값을 직접 변경하게 되면, 비교를 위해 저장해 둔 원래 값이 변하게 되어 정렬 결과가 올바르게 나오지 않습니다.

따라서, 아래 부분에서 `A[i]` 대신 `key`를 사용하면 올바르게 작동합니다.

```java if (A[j] > key) { // A[i] 대신 key 사용 A[j + 1] = A[j]; num = j; } else { num = j+1; break; } ```

이렇게 하면, `key`에 저장된 원래 값을 기준으로 비교를 수행하므로 `A[i]` 값이 중간에 변경되어도 문제가 되지 않습니다. 이로 인해 삽입 정렬 알고리즘이 올바르게 작동하게 됩니다.

if (A[j] > key) { // A[i] 대신 key 사용

A[j + 1] = A[j];

num = j;

} else {

num = j+1;

break;

}

코딩테스트 질문

... 기업이지만 코딩테스트는 치고싶다 하는 회사에서는 보통 외부 시스템 즉, 백준이나 프로그래머스와 같은... 이때는 파이썬, C++, 자바 등 언어를 가리지 않고 문제를 풀...

중소기업 자바 코딩테스트

... 질문드립니다 백준프로그래머스랑 비슷하게 나오나요? 신입 개발자인데 어느정도... 온라인으로 코딩테스트 본다고 합니다 코딩테스트는 프로그래머스 기준으로 3레벨 정도...

자바스크립트로 백준 코딩테스트...

안녕하세요, 자바스크립트 이제 막 배우기 시작했는데, 처음부터 코테준비도... 해서 자바스크립트와 nodejs를 공부하면 되는건지, 그 중에서도 특히...

코딩 테스트,백준 질문

지금 자바로 풀고 있는데. 자바로 푸는 것이 어렵다고 하는데, 꽤 불리할까요?... 그에 비해서 자바나 파이썬은 그런 부분이 잘 되어 있죠. 선호 언어는 C/C++ > python...

코딩테스트 및 프로젝트 질문 (취준)

... 지금은 백준 그리디를 통해 꾸준히 공부중이고요. 질문은 이제 제가 it 기업들에 지원을 할때 코딩테스트는... 다 자바를 이용한 서버개발이나 웹개발을 하더라고요....