알고리즘 문제/프로그래머스

프로그래머스 0단계 특이한 정렬- java

2023. 5. 18. 14:30
목차
  1. 문제 설명
  2. 제한사항
  3. 문제풀이 1
  4. 다른사람 문제풀이 

문제 설명

정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist의 원소 ≤ 10,000
  • 1 ≤ numlist의 길이 ≤ 100
  • numlist는 중복된 원소를 갖지 않습니다.

문제풀이 1

import java.util.*;
class Solution {
    public int[] solution(int[] numlist, int n) {
        // 거리와 원소를 저장하는 Map 생성
        Map<Integer, Integer> distanceMap = new HashMap();
        // 거리 계산 및 Map에 저장
        for(int num: numlist){
            int distance = Math.abs(num -n);
            distanceMap.put(num, distance);
        }
        // 거리에 따라 오름차순으로 정렬 하고, 거리가 같으면 원소의 크기에 따라 내림차순으로 정렬
        List<Integer> sortedList = new ArrayList<>(distanceMap.keySet());
        sortedList.sort((a,b) ->{
            int distanceA = distanceMap.get(a);
            int distanceB = distanceMap.get(b);
            if(distanceA == distanceB){
                return b-a;
            }else {
               return distanceA - distanceB;
        }
    });
        // 결과 배열 생성
        int[] result = new int[sortedList.size()];
        for(int i =0; i < sortedList.size(); i++){
            result[i] = sortedList.get(i);
        } 
        return result;
}
}

1. 거리와 원소를 저장하는 Map 생성

2. 거리 계산및 Map에서 저장

3. 거리에 따라 오름차순으로 정렬 하고 거리가 같으면 원소의 크기에 따라 내림차순으로 정렬

4. 결과 배열 반환

다른사람 문제풀이 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] numList, int n) {
        return Arrays.stream(numList)
                .boxed()
                .sorted((a, b) -> Math.abs(a - n) == Math.abs(b - n) ? b.compareTo(a) : Integer.compare(Math.abs(a - n), Math.abs(b - n)))
                .mapToInt(Integer::intValue)
                .toArray();
    }
}
  1. Arrays.stream(numList): numList 배열을 스트림으로 변환합니다.
  2. .boxed(): int 형의 원소들을 Integer 객체로 박싱하여 스트림의 요소 타입을 Integer로 변경합니다.
  3. .sorted((a, b) -> ...): 정렬을 수행합니다. 정렬 기준은 주어진 람다식으로 작성되어 있습니다.
    • Math.abs(a - n) == Math.abs(b - n): a와 b의 거리가 n으로부터의 거리가 같은 경우를 비교합니다.
    • b.compareTo(a): 거리가 같을 경우에는 b와 a를 비교하여 내림차순으로 정렬합니다.
    • Integer.compare(Math.abs(a - n), Math.abs(b - n)): 거리가 다를 경우에는 거리를 비교하여 오름차순으로 정렬합니다.
  4. .mapToInt(Integer::intValue): 정렬된 요소들을 int 형으로 변환하여 IntStream으로 변경합니다.
  5. .toArray(): IntStream을 int 배열로 변환하여 반환합니다.
    따라서, 주어진 numList 배열의 원소를 n으로부터 가까운 순서로 정렬하여 결과를 반환하는 코드입니다.

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

 

프로그래머스

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

programmers.co.kr

 

저작자표시 (새창열림)

'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글

프로그래머스 0 단계 머쓱이보다 키 큰 사람 - JAVA  (0) 2023.05.12
프로그래머스 0 단계 중복된 숫자 개수 - JAVA  (0) 2023.05.12
프로그래머스 0 단계 7의 개수 - JAVA  (0) 2023.05.12
프로그래머스 0 단계 캐릭터의 좌표-java  (1) 2023.05.12
프로그래머스 0단계 문자열 정렬하기 (2) - java  (0) 2023.05.11
  1. 문제 설명
  2. 제한사항
  3. 문제풀이 1
  4. 다른사람 문제풀이 
'알고리즘 문제/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 0 단계 머쓱이보다 키 큰 사람 - JAVA
  • 프로그래머스 0 단계 중복된 숫자 개수 - JAVA
  • 프로그래머스 0 단계 7의 개수 - JAVA
  • 프로그래머스 0 단계 캐릭터의 좌표-java
가끔개발
가끔개발
가끔개발
가끔쓰는개발블로그
가끔개발
전체
오늘
어제
  • 분류 전체보기 (75)
    • 오류모음집 (8)
      • Ohouse버그 (6)
    • 포트폴리오 (14)
      • ohouseClone (12)
    • JAVA&Spring (4)
      • Settting (3)
    • Back-end (4)
    • 알고리즘 문제 (20)
      • 이론 (6)
      • DFS&BFS (2)
      • 이진탐색 (1)
      • 다이나믹 프로그래밍 (0)
      • 프로그래머스 (11)
    • 개발 잡동산이 (0)
    • 취업 준비 (19)
      • 실전 JPA (15)
    • 개발 꿀팁 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 동빈나
  • 기술면접
  • 취준생
  • 신입
  • intellj
  • 면접
  • programing
  • CS
  • 이것이 코딩 테스트이다
  • 취준
  • Spring
  • 자바
  • 개발자
  • 백엔드
  • java

최근 댓글

최근 글

hELLO · Designed By 정상우.
가끔개발
프로그래머스 0단계 특이한 정렬- java
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.