백엔드/Java

버블 정렬 페어 프로그래밍 회고

삐삐에스 2024. 7. 3. 15:03

Java로 버블 정렬을 구현해보는 페어 프로그래밍을 진행했다.

 

나와 함께 페어 프로그래밍을 한 팀원의 깃허브는 아래에 첨부하겠다!

https://github.com/LimSeHyeon

 

LimSeHyeon - Overview

LimSeHyeon has 16 repositories available. Follow their code on GitHub.

github.com

 

 

우리는 30분 제한을 두고 페어 프로그래밍을 시작했는데, 5분마다 진행자와 관찰자 역할을 바꾸기로 했다.

그런데 같이 알고리즘 스터디를 해서 그런지 10분 만에 코드를 완성해버렸다..🤭

(알고리즘 스터디 레포도 첨부하겠다! 많은 방문 바람..ㅎ)

https://github.com/AlgorithmStudy-PDA-4th/algo-challenges

 

GitHub - AlgorithmStudy-PDA-4th/algo-challenges

Contribute to AlgorithmStudy-PDA-4th/algo-challenges development by creating an account on GitHub.

github.com

 

 

가위바위보에서 내가 이겨서 먼저 진행자를 맡게 되었다!

나는 진행자로서 관찰자인 세현이의 요구사항대로 개발을 시작했다.

먼저 우리는 배열의 Size배열의 요소를 사용자에게 입력받기로 했다.

 

입력을 받을 때는 BufferedReader 객체를 사용했고, 배열의 요소를 잘라서 저장하기 위해 StringTokenizer를 사용했다.

그리고 정수 배열을 만들기 위해 배열을 돌면서 Integer.parseInt로 형변환을 진행했다.

import java.io.*;
import java.util.StringTokenizer;

public class BubbleSort {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int size = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
    }
}

 

5분이 지나고 내가 관찰자가 되었을 때, 나는 버블 정렬 알고리즘을 코드로 구현하고자 했다.

우선 이중 for문을 작성했고(이것까지는 세현이가 했다), 이중 for문 안에서 각 배열의 요소를 비교하며 앞의 요소가 더 크다면 서로 위치를 바꾸고 아니라면 다음 요소로 넘어갔다.

정렬이 끝난 후에는 System.out.print()를 사용해서 정렬된 배열의 요소를 출력하게 했다.

    for (int i = 0; i < size; i++) {
        for (int j = i + 1; j < size; j++) {
            if (arr[i] > arr[j]) {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for(int i=0; i<size; i++) {
        System.out.print(arr[i]+" ");
    }

 

여기까지 코드를 작성하고 결과값을 확인했더니 아래와 같이 나왔다.

psvm 실행 결과

 

 

구현을 완료한 뒤에 실행을 했는데, 이 때 배열의 요소를 띄워쓰기로 구분하여 입력해야하는데 Enter를 쳤다. 그랬더니 NoSuchElementException 에러가 발생했다.

NoSuchElementException

 

BubbleSort의 11번째 줄을 보니 아래처럼 코드가 작성되어 있었다.

arr[i] = Integer.parseInt(st.nextToken());

즉, st.nextToken()이 없는데 이 값을 가져오려고 했기 때문에 문제가 된 것이다.(for문으로 size만큼 돌렸기 때문에...)

 

이 문제는 우리가 입력을 잘못해서 발생했는데, 이렇듯 사용자가 size와 맞지 않는 배열을 입력했을 때 NoSuchElement같은 에러 말고 이해하기 쉬운 에러를 발생시키고 싶었다.

그래서 Exception Handling 코드를 추가했다.

        for (int i = 0; i < size; i++) {
            if (!st.hasMoreTokens()) {
                throw new IOException("배열의 크기가 " + size + "보다 작아요.");
            } else {
                arr[i] = Integer.parseInt(st.nextToken());
            }
        }

 

이렇게 예외 처리 코드를 추가하고 똑같이 입력했을 때, 아래와 같이 IOException이 발생했다.

배열의 크기가 작아요. 라는 에러 발생

 

 

우리는 이렇게 페어 프로그래밍을 끝냈다. 페어 프로그래밍을 이전에도 해본 적은 많지만 여전히 어색한 것 같다.

그렇지만 오류를 빠르게 잡아낼 수 있고, 통일성있는 코드를 작성하는데에 많은 도움이 된다고 생각했다.

그리고 에러 뜨자마자 자연스럽게 예외 처리를 고민하는 것을 보니까 우리 꽤 개발자 같을지도...^^

 

 

 

나랑 같이 페어 프로그래밍을 진행한 팀원의 블로그 포스팅도 많이 봐주세용ㅎㅎ

https://velog.io/@dlatpgus1205/%ED%8E%98%EC%96%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%83%9D%EC%83%9D%ED%9B%84%EA%B8%B0

 

Pair-Programming

알고리즘 문제를 푸는 시간을 가져봤다. 다만! 지금까지의 알고리즘 풀이와의 다른 점은 ? (물론 알고리즘 관련 글을 작성한건 오늘이 처음이지만) 혼자가 아닌 "도모다치"와 함께했다는 것이당

velog.io

 

반응형