티스토리 뷰

반응형

 

 

 

 

지난 포스팅의 자바 Day20 강좌 리뷰에 이어

이번 포스팅에서는 Day 20 자바 코드 리뷰를 진행해보자.

 

 

Day 20

 


이번 문제도 문제 자체를 이해하는데는

큰 어려움이 없었는데

list의 값을 어떻게 꺼내와야할지 몰라서

한참을 해맸다.

 

결국 인터넷을 통해

list.get(i)  (i:인덱스)를 사용하면 된다는 것을 알고 해결했다.

 

또, 처음에는 if문을 작성할 때

다음과 같이 작성했었다.

 

for (int i = 0; i < n; i++) {
    // Track number of elements swapped during a single array traversal    
    for (int j = 0; j < n - 1; j++) {
        // Swap adjacent elements if they are in decreasing order
        if (a.get(j) > a.get(j+1)) {
            int temp = a.get(j);
            a.get(j) = a.get(j+1);
            a.get(j+1) = temp;
        }
    }
}

 

위와 같이 작성하니

a.get(j) = a.get(j+1);

a.get(j+1) = temp;

부분에 에러가 발생했다.

 

그래서 어떻게 처리해야하는지

인터넷에 검색하다가

set을 사용하면 된다는 것을 알게 되었다.

 

최종 코드를 보면 필자의 말이 이해가 될 것이다.

if문이 우리가 해결해야할 부분이므로

if문을 특히 주의해서 보자.

 

 


 

 

전체 소스 코드 👇👇

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;



public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int numberOfSwaps = 0;
        int n = Integer.parseInt(bufferedReader.readLine().trim());

        List<Integer> a = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
            .map(Integer::parseInt)
            .collect(toList());

        // Write your code here
        for (int i = 0; i < n; i++) {
            // Track number of elements swapped during a single array traversal    
            for (int j = 0; j < n - 1; j++) {
                // Swap adjacent elements if they are in decreasing order
                if (a.get(j) > a.get(j+1)) {
                    int temp = a.get(j);
                    a.set(j, a.get(j+1));
                    a.set(j+1, temp);
                    numberOfSwaps++;
                }
            }
            
            // If no elements were swapped during a traversal, array is sorted
            if (numberOfSwaps == 0) {
                break;
            }
        }
        System.out.println("Array is sorted in " + numberOfSwaps + " swaps.");
        System.out.println("First Element: " + a.get(0));
        System.out.println("Last Element: " + a.get(n-1));
        bufferedReader.close();
    }
}

 

 

코드를 말로만 설명하는 것이 어려워

필자가 잘 알아듣게 설명을 했는지 모르겠으나

위의 if문을 보고도

코드가 이해가 되지 않는다면

댓글로 질문해주길 바란다.

 

 

 


 

 

그럼 오늘도 열심히 개발하자. 🔥

반응형