관리 메뉴

JIE0025

[연습문제][lv.2] 최대값과 최솟값 - 자바(Java) 본문

알고리즘/프로그래머스

[연습문제][lv.2] 최대값과 최솟값 - 자바(Java)

Kangjieun11 2023. 4. 12. 21:20
728x90

 
 
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12939

프로그래머스

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

programmers.co.kr

 
 
 
 


 

문제

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

 

제한 조건

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

 

 
 

✅ 풀이 과정

0.  자료구조 / 알고리즘 선택

 
int[] 배열로 만든다.
Array.sort()로 정렬한다.
0번 인덱스와, 마지막인덱스가 가장 작은/큰 값이다.
 
해당 값을 StringBuilder로 return 형식을 만들고 반환한다.
 
 
 

✅ 내가 쓴 정답코드

import java.util.*;

class Solution {
    public String solution(String s) {
      
        int[] numbers = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray();
        Arrays.sort(numbers);
        
        StringBuilder answer = new StringBuilder();
        answer.append(numbers[0]).append(" ").append(numbers[numbers.length -1]);

        return answer.toString();
    }
}

 
 
 

✅ 문제를 풀기 위해 새롭게 학습한 것

 
오랜만에 자바로 문제를 풀어서... 기억 안나는게 많다 ㅠㅠ
 
✔️ 배열 관련

  • 배열의 길이 구하기 ✍️  s.length
  • 배열 정렬하기 ✍️ Array.sort(s)

 
✔️ StringBuilder

  • 그냥 문자열로 해도 되지만 StringBuilder를 사용하고 싶었다.
    한가지 문제점은 프로그래머스에 결과로 제출해야하는 형태는 String이라 StringBuilder에서 String으로 형변환 .toString()을 해줘야한다는것.. 그리고 이렇게 간단한 정도의 데이터를 만들거면 사실 String으로 바로 해도 된다. 
  • 스트링빌더는 문자열을 추가할 때 append()함수를 쓰면 간단하게 사용할 수 있다. 

 
✔️ 문자열배열을 다른 타입의 배열로 형변환하기 

  • s.split("") 의 결과는 String[] 타입이다. 
  • 따라서 Arrays.stream(s.split(""))을 할 수 있다. 
  • mapToInt() :    mapToInt, mapToLong,  mapToDouble 모두 가능하다.
  • Integer::parseInt

Array.stream을 하면 기본타입에 대해서 똑같은 형태를 사용할 수 있다.
 

double[] doubleArray = Arrays.stream(s.split(" ")).mapToDouble(Double::parseDouble).toArray();

 
 
기본 타입(int, double 등)에 대해서는, mapToInt(), mapToDouble(), mapToLong()과 같은 메소드를 사용하여 변환하면 됩니다. 이들 메소드는 각각 해당하는 기본 타입으로 변환하여 스트림을 반환합니다.
따라서, 다른 형태에 대해서도 마찬가지로 해당하는 메소드를 사용하여 변환하면 됩니다. 예를 들어, mapToFloat(), mapToShort(), mapToByte() 등의 메소드를 사용하여 float, short, byte 등의 기본 타입 배열로 변환할 수 있습니다.
 

  • Integer와 같은 프리미티브타입의 형으로 변환하는 방법
    • toArray() 메소드에서 Integer[]::new 생성자 참조를 사용하여 Integer 배열로 변환 한다.
String[] strArray = {"1", "2", "3", "4", "5"};
Integer[] intArray = Arrays.stream(strArray)
                            .map(Integer::valueOf)
                            .toArray(Integer[]::new);

 
 





references