본문 바로가기
개발노트/coding test

[programmers 알고리즘 문제풀이] K번째 수, 완주하지 못한 선수

by lovvepearl 2022. 1. 25.

 

01. K번째 수

 

배열 array와 array에 영향을 주는 변수를 모아둔 commands 배열이 있다.

commands 배열은 항상 원소가 3개이고 순서대로 i, j, k라는 변수이다.

 

먼저 commands 배열을 돌면서 원소를 하나씩 꺼내고 

array를 자르는 역할을 하는 i와 j는

예를 들어 i=2, j=5라면 array[2:5]로 자르면 index 2번째를 제외하고

3,4,5로 잘리기 때문에 i에는 -1을 해주어 2,3,4,5로 잘리게 변수를 설정한다.

 

k는 몇번째 수를 의미하기 때문에 실제 array의 index는 0부터 시작하기 때문에

-1을 해주어야 원하는 수를 찾을 수 있다.

 

new_array 라는 변수를 설정하여 잘라진 array를 내림차순으로 정렬하고

이 새로운 배열의 k번째 수를 k_num이라는 빈리스트에 append하여

return하여 출력하였다. 

 

 

02. 완주하지 못한 선수

 

참여자와 완주자는 1명이 반드시 차이가 나야하고, 

완주하지 못한 선수들의 이름을 return 해야한다. 

 

참여자와 완주자의 index를 0으로 지정하고

완주자의 index가 길이보다 작을때까지 while문을 돌려서

참여자와 완주자가 같지 않으면 참여자의 index를 하나씩 늘려서

같아질때까지 비교하고,

 

만약 같다면 참여자 리스트에서 완주자를 지우고

완주자의 index를 하나 늘리고 참여자의 index는 0으로 만들어서

다음 완주자와 참여자의 list를 비교하도록 코드를 짜봤다.

 

완주하지 못한 선수들이 정상적으로 return은 되지만

"선수이름"으로 출력되지 않아서 오답처리 되나 싶어서

"선수이름"으로 출력되도록 print문을 설정했지만

시간초과로 테스트에 통과하지 못하였다🤔

 

알고리즘의 정렬 방식을 사용해서 문제를 풀 수 있을 것 같은 생각이 드는데

배열, 스택, 큐 등의 내용을 더 학습한 뒤에 재도전 해봐야겠다.