[프로그래머스] 레벨2 최댓값과 최솟값

0

🐶 코딩테스트

목록 보기
12/13
post-thumbnail

🟪 문제 바로 가기

이 글은 문제를 정리하고 저의 풀이를 보여드리는 거예요. 실제로 문제를 보고 풀어보세요. 클릭! 클릭! 해보세요! 🖱️

🟪 문제 설명

  • 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다.
  • 문자열 s에 나타나는 숫자 중 최소값과 최대값을 찾아
  • 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
  • 문자열 s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

💟 입출력 예시

🟪 나의 로직

💟 선택 정렬

  • 선택 정렬로 주어진 문자열s을 문자열 배열에 대입한다.
  • 문자열 배열을 정수 리스트에 대입한다.
  • 정수 리스트를 선택정렬 알고리즘을 이용하여 정렬시킨다.
  • 정렬된 리스트의 첫 인덱스의 값과 마지막 인덱스의 값을
    String.format("%d %d")를 이용해서
    "(최소값) (최대값)"형태의 문자열을 반환할 것이다.

💟 구현

  • 주어진 문자열 s를 배열String[] array로 대입
    • String[] array = s.split(" ")
  • String[] arrayArrayList<Integer> orderedArrList로 대입
    • for(String num : array) orderedArrList.add(Integer.parseInt(num))
  • for문 2개로 선택정렬 구현
    • 첫번째 for 문 == 패스스루
      • 범위 : 인덱스0에서 마지막인덱스 바로 전까지 orderedArrList.size()-2
        (선택정렬은 배열의 마지막인덱스 바로 전의 인덱스가 되면 마지막 패스스루가 되기 때문이다.)
      • for(int startIdxOfPassThrogh=0; startIdxOfPassThrogh<orderedArrList.size()-1; startIdxOfPassThrogh++)
      • 최솟값의 인덱스-minmumValueIdx패스스루의 시작인덱스-startIdxOfPassThrogh 로 초기화 시킨다.
        (패스스루가 처음 시작될 때는 시작인덱스의 값이 곧 최솟값이므로)
      • minmumValueIdx = startIdxOfPassThrogh
    • 두번째 for 문 == 현재 최솟값과 각각의 값들을 비교하여 최종 최솟값을 정한다
      • 범위 : 패스스루의 시작인덱스-startIdxOfPassThrogh의 바로 다음 인덱스부터 마지막 인덱스까지
      • for(nowIdx=startIdxOfPassThrogh+1; nowIdx<orderedArrList.size(); nowIdx++)
      • 최솟값과 다음값을 비교한다.
      • 최솟값보다 더 작은 값이 나오면 최솟값을 바꾼다.
      • if(orderedArrList[nowIdx]<orderedArrList[minmumValueIdx]) minmumValueIdx = nowIdx
    • 두번째 for 문이 끝나면
      • 패스스루의 시작인덱스-startIdxOfPassThrogh패스스루에서 최종적으로 결정된 최솟값의 인덱스-minmumValueIdx를 교환한다.
      • if(startIdxOfPassThrogh != minmumValueIdx)
        int temp = orderedArrList[minmumValueIdx]
        orderedArrList[minmumValueIdx] = orderedArrList[startIdxOfPassThrogh]
        orderedArrList[startIdxOfPassThrogh] = temp
  • for문이 끝나면 최소값과 최대값을 "(최소값) (최대값)"형태의 문자열로 반환한다.
    • return String.format("%d %d", orderedArrList.get(0), orderedArrList.get(orderedArrList.size()-1))

🟪 나의 코드

public static String solution(String s) {
    String[] array = s.split(" ");
    ArrayList<Integer> orderedArrList = new ArrayList<>();

    for (String num : array)
        orderedArrList.add(Integer.parseInt(num));

    for (int startIdxOfPassThrogh = 0; startIdxOfPassThrogh < orderedArrList.size()-1; startIdxOfPassThrogh++) {
        int minmumValueIdx = startIdxOfPassThrogh;

        for (int nowIdx = startIdxOfPassThrogh + 1; nowIdx < orderedArrList.size(); nowIdx++) {
            if (orderedArrList.get(nowIdx) < orderedArrList.get(minmumValueIdx))
                minmumValueIdx = nowIdx;
        }

        if (startIdxOfPassThrogh != minmumValueIdx) {
            int temp = orderedArrList.get(minmumValueIdx);
            orderedArrList.set(minmumValueIdx, orderedArrList.get(startIdxOfPassThrogh));
            orderedArrList.set(startIdxOfPassThrogh, temp);
        }
    }

    return String.format("%d %d", orderedArrList.get(0), orderedArrList.get(orderedArrList.size()-1));
}

🟪 결과 : 성공💕

🥶❓만약 런타임 에러가 난다면❗

필요한 패키지 임포트를 하지 않았기 때문입니다!

profile
몇 번을 넘어져도 앞으로 계속 나아가자

0개의 댓글