[프로그래머스]-K번째수
https://school.programmers.co.kr/learn/courses/30/lessons/42748
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

일차원 배열까지는 괜찮았는데 이차원 배열이 약간은 부담스러워서 조금 풀기가 꺼려졌던 문제였습니다. 그래도 차근차근 문제에 접근하고자 노력한 끝에 겨우겨우 이해하고 풀 수 있었습니다.
문제에서 주어진 조건을(i = 2, j =5, k = 3) 해석하면 2번째 숫자부터 5번째 숫자까지 자르고 정렬한 다음 3번째에 있는 수를 구해야 한다는 뜻입니다. 문제에 나와있기는 하지만 다시 한 번 정리하면서 문제해결의 방향을 다시 잡아봅니다.
배열이기 때문에 2번째 숫자부터 5번째 숫자가 아니라 실제로는 1번째부터 4번째 숫자까지라고 보시면 됩니다. 그리고 3번째에 있는 수를 구하는 것이 아닌 2번째 수를 구한다고 생각해주셔야 문제해결에 조금 쉽게 접근할 수 있습니다.
*풀이
우선 입출력 예에 나와있는 케이스로 봐서 answer 배열의 길이는 commands 배열의 길이와 동일합니다.
그렇기 때문에 이런식으로 작성해줍니다.

그 다음 반복문을 통해 해결과정을 처리해줍니다.

반복문 로직 작성시 return 배열의 길이반큼 반복해주고 이중 for문을 작성합니다.
그리고 배열과는 다른 가변적인 요소의 속성을 가진 List를 활용합니다. 상대적으로 List는 배열의 길이를 지정하지 않고 사용할 수 있다는 장점이 있어서 알고리즘 문제풀이시 유용하게 활용하는 경우가 많습니다. 이번 문제를 통해 참고해주시면 좋을 것 같습니다.
(참고 - List는 중복 가능)
내부 for문은 commands[i][0] - 1 부터 commands[i][1] 까지 반복해주는데 이게 바로 i번째 숫자부터 j번째 숫자까지 자른다는 개념을 표현한 것입니다. 이차원 배열로 표현하려고 하니 막상 생각이 잘 나지 않아서 꽤나 고생했습니다. 여기서 list는 array배열의 "commands[i][0] - 1" 요소값부터 "commands[i][1]" 요소값까지의 범위를 포함한 배열이라고 보시면 됩니다.
그 다음 Collections.sort를 통해 list를 정렬해주시고 answer 배열에 원하는 값을 추가해줍니다. 값은 문제의 조건에 맞춰 구성된 list의 요소들 중에 k번째 있는 수를 추가해주면 됩니다. 여기서는 k가 list의 3번째 요소
즉, "commands[i][2] - 1" 번째 요소이므로 list.get(commands[i][2] - 1)의 요소값을 answer 배열에 추가해주시면 원하는 return값을 얻을 수 있습니다.
*최종코드

*요약
이 문제를 통해 list와 배열 및 다른 자료구조와 관련된 내용을 더 공부해야겠다는 생각이 들었습니다.
이번에 활용된 list, 배열 알고리즘에 대한 개념을 제대로 숙지해야 다른 알고리즘 문제풀이에도 큰 도움이 되지 않을까 싶습니다. 나중에 자료구조 관련내용으로 다시 찾아뵙겠습니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [프로그래머스]카운트 다운 (0) | 2024.06.10 |
|---|---|
| [프로그래머스]모의고사 (0) | 2022.12.30 |
| [프로그래머스]카펫 (0) | 2022.12.28 |
| [프로그래머스]-최소 직사각형 (0) | 2022.12.28 |
| [프로그래머스]부족한 금액 계산하기 (0) | 2022.12.27 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스]카운트 다운
[프로그래머스]카운트 다운
2024.06.10 -
[프로그래머스]모의고사
[프로그래머스]모의고사
2022.12.30 -
[프로그래머스]카펫
[프로그래머스]카펫
2022.12.28 -
[프로그래머스]-최소 직사각형
[프로그래머스]-최소 직사각형
2022.12.28