[Study] 프로그래머스 lv.2 최댓값과 최솟값

ayboori·2023년 6월 12일
0

Java Study

목록 보기
2/34

https://school.programmers.co.kr/learn/courses/30/lessons/12939

풀이 로직

  1. 입력 받은 String 문자열을 숫자 단위로 하나씩 자른다.

  2. 자른 String 배열을 int 타입으로 변환한다.

  3. int 타입의 숫자들의 값을 비교한다.

    3-1. max / min 변수에 입력받은 숫자들 중 첫번째 값을 넣는다.

    3-2. 루프를 돌리며 max / min 변수와 n번째 숫자를 비교하여 더 큰 값이나 작은 값으로 교체.

  4. 이때 max, min 비교는 함수를 만들어서 한다.

사용한 함수

Integer.parseInt()

  • 문자열을 int 정수로 리턴한다.
  • 문자열이 유효한 숫자를 포함하지 않는다면 이 throw 된다.

NumberFormatException = 숫자 형식 오류

숫자형의 Input이 필요한 곳에 숫자형이 아닌 타입이 들어올 때 발생하는 런타임 예외

‼️ 해결 방법

try - catch 문을 작성한다.

        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

split()

  • 특정 구분자를 기준으로 문자열을 잘라서 배열에 넣어준다.
  • 활용 방법에 따라 문자열을 몇 개 이하로 자를 것인지 정할 수 있다.
  • 구분자를 | 로 구분하여 구분자를 여러개 사용할 수 있다.
String str = "Hello World Everyone !!";
String[] ArraysStr = str.split(" "); // [Hello, World, Everyone, !!]
String[] ArraysStr = str.split(" ", 2); // [Hello, World Everyone !!]

내가 작성한 코드

    
class Solution {
		public String solution(String s) {
		String [] cutter = s.split(" ");
		String answer = min(cutter) + " " + max(cutter); // gkatn ghcnf
    return answer;
}

public int max(String [] inputNum){
    int maxNum = Integer.parseInt(inputNum[0]);
    try{
        for(String a : inputNum){
            int compareNum = Integer.parseInt(a);
            if(maxNum < compareNum){
                maxNum = compareNum;
            }
        }
    }catch (NumberFormatException ex){
        ex.printStackTrace();
    }

    return maxNum;
}

public int min(String [] inputNum){
    int minNum = Integer.parseInt(inputNum[0]);
    try{
        for(String a : inputNum){
            int compareNum = Integer.parseInt(a);
            if(minNum > compareNum){
                minNum = compareNum;
            }
        }
    }catch (NumberFormatException ex){
        ex.printStackTrace();
    }

    return minNum;
	}
}

다른 사람의 코드

public class GetMinMaxString {
    public String getMinMaxString(String str) {
        String[] tmp = str.split(" ");
        int min, max, n;
        min = max = Integer.parseInt(tmp[0]);
        for (int i = 1; i < tmp.length; i++) {
                n = Integer.parseInt(tmp[i]);
            if(min > n) min = n;
            if(max < n) max = n;
        }

        return min + " " + max;

    }

    public static void main(String[] args) {
        String str = "1 2 3 4";
        GetMinMaxString minMax = new GetMinMaxString();
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("최대값과 최소값은?" + minMax.getMinMaxString(str));
    }
}

내 코드와 비교

문자열 변환과 동시에 비교하고, if 문을 내부에 두 번 적어서 불필요한 중복을 막았다.

대신 내가 작성한 코드는 함수로 작성해서 재사용성이 올라갔다.

시간을 단축하는 방법

지난번 발표 때 들은 스트링 버퍼 사용 / appned의 적절한 사용으로 시간을 0초대까지 내릴 수 있다는 것을 배웠다.

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글