프로그래머스_최댓값과 최솟값 JAVA

2025. 1. 27. 02:37·알고리즘/알고리즘 풀이
반응형

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

이번에 풀 문제는 '최댓값과 최솟값'이다. 무려 LEVEL 2!

LEVEL2라서 약간 긴장했으나 문제가 짧아서 안도했다.

그리고 이번 문제는 처음 푸는 문제라 더욱 긴장쓰

문제 내용은 그리 어렵지 않았다. 공백을 구분자로 정수가 적힌 문자열에서 최솟값과 최댓값을 찾아 "최솟값 최댓값" 형태로 리턴하면 된다.

 

코드

import java.util.*;
class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ");
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
            }
        });
        String first = arr[0];
        String last = arr[arr.length-1];
        
        if(Integer.parseInt(first) > Integer.parseInt(last)) {
            return last + " " + first;
        }
        
        return first + " " + last;
    }
}

 

1점 밖에 안,,,주다니,,ㅜ

처음에는 Arrays.sort()로만 해서 제출했다가 거의 모든 케이스에서 실패가 나서 곰곰히 생각해보니....

문자열 비교라서 99와 100을 비교하면 99가 최댓값이 되어버리는 사태가 벌어졌다.

그래서 급하게 Comparator를 사용해서 정렬 시 문자열을 숫자타입으로 변경해서 정렬을 시도했다.

그랬더니 1점!

 

다른 사람들의 풀이를 보니까 String 배열을 for문을 돌려 int[] 배열로 만들고 min,max를 구하거나,

stream을 사용해서 min(), max()를 사용하는 방식이 있어 어떤 점이 낫냐고 챗GPT한테 물어보니 내 코드는 쓰레기라고 알려줬다.

1점을 준 이유가 있었구나!!

 

사람 입장에서 생각해봤을 땐 정렬을 먼저하고 맨 앞에 숫자와 맨 뒤에 숫자로 최댓값과 최솟값을 구하는게 빠른 것 같아 그렇게 구현한건데,, 

컴퓨터 입장은 또 다른가보다. 정렬은 불필요한 연산이라 생각해서 오히려 정렬 코드가 없는게 더 좋다고 한다.

 

for 루프 코드

class Solution {
    public String solution(String s) {
        String[] strArr = s.split(" ");
        int[] intArr = new int[strArr.length];
        for(int i = 0;  i < intArr.length; i++) {
            intArr[i] = Integer.valueOf(strArr[i]);
        }
        
        int min = intArr[0];
        int max = intArr[0];
        for(int num : intArr) {
            if(min > num) min = num;
            if(max < num) max = num;
        }
        
        return String.valueOf(min) + " " + String.valueOf(max);
    }
}

 

stream 코드

import java.util.*;

class Solution {
    public String solution(String s) {
        int min = Arrays.stream(s.split(" "))
            .mapToInt(Integer::parseInt)
            .min()
            .orElse(0);
        int max = Arrays.stream(s.split(" "))
            .mapToInt(Integer::parseInt)
            .max()
            .orElse(0);
        
        return min + " " + max;
    }
}

 

확실히 stream을 이용한 코드가 가독성이 제일 좋다.

 

컴퓨터의 입장에서 한 번 더 생각해봐야 한다는 교훈을 얻었다!(연애하는 기분ㅎ)

오늘도 재밌..는 코딩!

반응형
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/알고리즘 풀이' 카테고리의 다른 글
  • 프로그래머스_핸드폰 번호 가리기 JAVA
  • 프로그래머스_약수의 합 JAVA
  • 프로그래머스_숫자 문자열과 영단어 JAVA
  • 프로그래머스_문자열 내림차순으로 배치하기 JAVA
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    MSA
    springboot
    egov
    백준
    RESTful
    운영체제
    프로그래머스
    SpringBoot를 이용한 RESTful Web Service 개발
    JPA
    인프런
    전자정부프레임워크
    react
    스프링부트
    기출문제
    IT
    프론트엔드
    개발자
    넥사크로
    에러해결
    토비의스프링부트
    SQL
    oracle
    토이프로젝트
    코딩테스트
    Java
    QueryDSL
    방통대
    자바스크립트
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
프로그래머스_최댓값과 최솟값 JAVA
상단으로

티스토리툴바