늦은 프로그래밍 이야기

230203 TIL (알고리즘) 본문

내일배움캠프/TIL, WIL

230203 TIL (알고리즘)

한정규 2023. 2. 4. 02:02

알고리즘

최댓값과 최솟값

코딩테스트 연습 - 최댓값과 최솟값

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

문자열 내의 모든 숫자들은 띄어 쓰기로 구분이 되어 있으므로 split 메소드를 사용하여 띄어쓰기 기준으로 구분하여 숫자들의 문자열 배열을 만들었다. 처음에는 min과 max의 변수를 선언할 때 기본값인 0으로 초기화하였고, 반복문으로 각각의 숫자들을 Math 클래스의 min과 max 메소드를 사용하여 최솟값은 min 변수에 최댓값은 max 변수에 담아 주었는데 문제가 발생하였다.

max가 0으로 시작하다 보니 0보다 작은 수들의 문자열은 max가 0으로 반환 되는 문제, min도 0으로 시작하다 보니 0보다 큰 수들의 문자열은 min이 0으로 반환되는 문제가 발생하였고, 해당 문자열의 첫번째 숫자를 min과 max에 넣어주어 문자열 내의 숫자의 범위에 포함되게 만들어 주었다.

public class Solution {
  public String solution(String s) {
    String answer = "";
    String[] array = s.split(" ");
    int min = Integer.parseInt(array[0]);
    int max = Integer.parseInt(array[0]);
    for (int i = 1; i < array.length; i++) {
      min = Math.min(min, Integer.parseInt(array[i]));
      max = Math.max(max, Integer.parseInt(array[i]));
    }
    answer = min + " " + max;
    return answer;
  }
}

코드를 작성하고 보니 parseInt가 너무 많이 쓰인 것 같고, 그렇게 좋은 방법 같지 않아서 다른 사람의 풀이를 보던 중 좋아보이는 방법인듯 하여 가져왔다.

다른 사람의 풀이

두개의 배열을 각각 하나는 문자열 배열로 split 메소드를 사용한 각 문자열 형태의 숫자들을 담아주는 배열이었고, 하나는 정수 배열로서 반복문을 사용해 각각의 숫자들을 정수로 parsing하여 정수 배열에 담아주었다.

그 후 sort 메소드를 사용하여 숫자의 배열을 오름차순으로 정렬하여 맨앞의 숫자를 min 위치에, 배열의 맨뒤의 숫자를 max 위치에 반환하는 메소드였다.

public String solution(String s) {
    String[] array = s.split(" ");
    int[] arrayInt = new int[array.length];

    for (int i = 0; i < arrayInt.length; i++) {
      arrayInt[i] = Integer.parseInt(array[i]);
    }

    Arrays.sort(arrayInt);
    String result = arrayInt[0] + " " + arrayInt[arrayInt.length - 1];

    return result;
  }
}

나와 동일하게 split 메소드를 사용하였지만, 다른 사람의 풀이와의 차이점은 나의 풀이는 간결해 보이지 않고 다른 사람의 풀이는 간결해 보이지만 다른 사람의 풀이에서 두개의 배열을 생성하는 것이 메모리를 많이 차지하는지에 대한 궁금증, 나의 풀이는 parseInt가 다른사람의 풀이보다 두배 더 많지만, sort 메소드를 위한 반복문은 없었다는 점에서 parseInt를 수행하는데 걸리는 시간과 sort 메소드를 수행하며 한번 더 반복문을 돌리는 시간 중 어떤 것이 더 효율적인지에 대한 궁금증이 남게 되었다.


 

'내일배움캠프 > TIL, WIL' 카테고리의 다른 글

230207 TIL (알고리즘, 프로젝트)  (0) 2023.02.07
230206 TIL (알고리즘, 프로젝트)  (0) 2023.02.07
230202 TIL (JPA 심화)  (0) 2023.02.03
230201 TIL (JPA 심화)  (0) 2023.02.01
230131 TIL (알고리즘, JPA 심화)  (0) 2023.01.31
Comments