들어가기 전에
이번 주는 학원 없이 내가 스스로 일정을 짜서 움직이는 첫 주이다. 지금까지는 다소 강제성이 있는 일정이라 일정 수행에 문제는 없었지마는, 앞으로도 잘해낼 수 있을까 걱정이긴 하다. 참고로 이번주는 설 연휴 겸 휴가를 낸 거라 다음주엔 정상 출석한다.
프로그래머스 코딩테스트
문제 1. 개미 군단
개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
설명: 아무리해도 답이 안 나와서 ChatGPT한테 자문을 구했다.
우선 장군개미의 병력이 크기 때문에 우선적으로 제해준다. 장군개미의 출타 수를 알기 위한 값이 generals 이다. 만일 장군개미로 상대할 수 없는 잔존 병력이 있을 때는 병정개미와 일개미의 병력으로 나누어 계산한다.
나는 단순히 장군개미를 하나 더 보내면 적은 수로 보낼 수 있지 않나 생각했었는데, 그렇게 되면 병력 손실이 일어나니 최대한 맞춰서 보내는 걸 목적으로 했어야 했다. 문제를 제대로 안 읽은 탓이지 뭐…
문제 2. 가장 큰 수 찾기
정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
설명: 가장 큰 값을 저장할 big과 index를 저장할 temp라는 변수를 만들어둔다. big은 array의 첫 번째 값으로 기입하여, 비교하였을 때 big보다 크면 저장한다. 이후 .push()를 사용해 배열에 넣어준다.
문제 3. 최댓값 만들기
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
설명: 일단 마구잡이로 나열되어 있을 numbers를 sort를 사용해 정리해준다. 만약 배열의 첫 번째 수와 마지막 수가 모두 음수라면 음수끼리 곱하여 최댓값을 구한다. 그렇지 않을 경우 가장 큰 수들의 곱과 가장 작은 수의 곱 중에서 더 큰 것을 반환한다.
문제 4 - 주사위의 개수
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
설명: 박스의 가로, 세로, 높이를 주사위의 변으로 나눈 값을 모두 곱하면 상자의 갯수가 된다.
문제 5 - 문자열 정렬하기 (1)
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
설명: 우선 받은 문자열을 .split()를 사용해 배열로 만들어준다. 이후 map을 사용해 Int, 즉 정수인 것만 골라낸다. 이후 sort로 오름차순 정렬을 하였다.