[프로그래머스] k번째수

2024. 10. 16. 16:15·여러가지/알고리즘 & 자료구조

K번째 수 찾기 알고리즘

문제 설명

배열의 특정 구간을 자르고, 그 구간을 정렬한 후, 정렬된 배열의 K번째 숫자를 찾는 문제입니다. 이를 통해 주어진 조건에 맞는 수를 구하는 과정을 연습할 수 있습니다.

예를 들어, 주어진 배열이 [1, 5, 2, 6, 3, 7, 4]이고, 명령어가 [[2, 5, 3], [4, 4, 1], [1, 7, 3]]인 경우를 살펴보겠습니다.

  1. 첫 번째 명령어: [2, 5, 3]

    • 배열의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
    • 이 배열을 정렬하면 [2, 3, 5, 6]이 됩니다.
    • 3번째 숫자는 5입니다.
  2. 두 번째 명령어: [4, 4, 1]

    • 배열의 4번째부터 4번째까지 자르면 [6]입니다.
    • 정렬 후 1번째 숫자는 6입니다.
  3. 세 번째 명령어: [1, 7, 3]

    • 배열의 1번째부터 7번째까지 자르면 [1, 5, 2, 6, 3, 7, 4]입니다.
    • 정렬 후 3번째 숫자는 3입니다.

위와 같은 과정을 통해, 최종적으로 구해진 결과는 [5, 6, 3]입니다.

제한사항

  • 배열의 길이는 1 이상 100 이하입니다.
  • 배열의 각 원소는 1 이상 100 이하입니다.
  • 명령어의 길이는 1 이상 50 이하입니다.
  • 명령어의 각 원소는 길이가 3입니다.

코드 구현

아래는 이 문제를 해결하기 위한 Java 코드입니다.

package lv1.k번째수;

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for(int loop_cnt = 0; loop_cnt < commands.length; loop_cnt++) {
            int i = commands[loop_cnt][0];
            int j = commands[loop_cnt][1];
            int k = commands[loop_cnt][2];
            int[] slicedArr = Arrays.copyOfRange(array, i-1, j);
            Arrays.sort(slicedArr);
            answer[loop_cnt] = slicedArr[k-1];
        }
        return answer;
    }

    public static void main(String[] args) {
        var main = new Solution();
        int[] a = {1, 5, 2, 6, 3, 7, 4};
        int[][] b = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
        System.out.println(Arrays.toString(main.solution(a, b))); // 출력: [5, 6, 3]
    }
}

코드 설명

  1. 배열과 명령어를 받는 메서드: solution 메서드는 배열과 2차원 명령어 배열을 매개변수로 받습니다.

  2. 명령어를 반복 처리: 각 명령어를 순회하면서 i번째부터 j번째까지의 부분 배열을 Arrays.copyOfRange 메서드를 사용해 잘라냅니다.

  3. 정렬 및 K번째 숫자 추출: 잘라낸 배열을 정렬한 후, K번째 숫자를 추출하여 결과 배열에 저장합니다.

  4. 결과 반환: 최종적으로 모든 명령어에 대한 K번째 숫자를 담은 배열을 반환합니다.

결론

이 문제는 배열의 특정 구간을 자르고 정렬한 후 K번째 숫자를 찾는 간단한 알고리즘을 통해, 배열 처리 및 정렬의 기초를 배울 수 있는 좋은 예제입니다. Java의 다양한 배열 및 정렬 메서드를 활용하여 간결하게 구현할 수 있습니다.

이와 같은 문제를 통해 기본적인 알고리즘 사고를 키우고, 실제 코딩 인터뷰나 알고리즘 대회에서 필요한 기초를 다질 수 있습니다.

저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[프로그래머스] 문자열 내마음대로 정렬하기  (4) 2024.10.16
[프로그래머스] 푸드 파이트 대회  (1) 2024.10.16
[프로그래머스] 숫자 문자열과 영단어  (0) 2024.10.16
[프로그래머스] 가장 가까운 같은 글자  (0) 2024.10.16
[프로그래머스] 시저암호  (0) 2024.10.16
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 문자열 내마음대로 정렬하기
  • [프로그래머스] 푸드 파이트 대회
  • [프로그래머스] 숫자 문자열과 영단어
  • [프로그래머스] 가장 가까운 같은 글자
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    완전탐색
    WebFlux
    java
    DP
    reactor
    SAA
    mybatis
    Spring Boot
    백준
    Spring WebFlux
    Redis
    항해99
    celery
    OOP
    Python
    ecs
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    RDS
    그리디
    취업리부트
    docker
    EC2
    spring
    프로그래머스
    Docker-compose
    시험
    AWS
    파이썬
    FastAPI
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] k번째수
상단으로

티스토리툴바