프로그래머스 코딩테스트 입문 - DAY8
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
numbers | num1 | num2 | result |
---|---|---|---|
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2-num1+1];
int j = 0;
boolean checker = false;
for(int i=0;i<numbers.length;i++) {
if(i==num1 || checker==true) {
answer[j] = numbers[i];
checker = true;
j++;
if(i+1 == num2) {
answer[j]= numbers[i+1];
break;
}
}
}
return answer;
}
}
checker변수를 이용해서 true일 경우에만 배열에 값을 넣을 수 있도록 코딩했다. 배열 넣기 시작한 순간부터 true이므로 값을 계속 넣다가, i값과 마지막 인덱스값이 같으면 break로 빠져나온다. 그렇게 완성된 answer를 리턴하는 코드이다.
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
age | result |
---|---|
23 | "cd" |
51 | "fb" |
100 | "baa" |
class Solution {
public String solution(int age) {
String answer = "";
String num = String.valueOf(age);
String[] arr = num.split("");
for(int i=0;i<arr.length;i++){
answer+=(char)(Integer.parseInt(arr[i])+97);
//97은 아스키코드 a의 문자화
}
return answer;
}
}
split으로 배열 arr에 문자 num을 쪼개어 넣는다.
배열 값을 하나씩 꺼내 97을 더하고 문자열 형태의 answer변수에 붙인다.
여기서 97을 더하는 이유는 97이 아스키 코드에서 a를 뜻하기 때문이다.
Integer.valueOf로 배열값+97을 한 후, char형태로 바꾸어 answer에 붙이면 된다. char형태이므로 문자끼리 붙이는 모습으로 완성된다.
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
emergency | result |
---|---|
[3, 76, 24] | [3, 1, 2] |
[1, 2, 3, 4, 5, 6, 7] | [7, 6, 5, 4, 3, 2, 1] |
[30, 10, 23, 6, 100] | [2, 4, 3, 5, 1] |
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
int idx = 1;
int n = emergency.length;
while(n>0) {
int max= 0;
for(int i=0;i<emergency.length;i++) {
if(max < emergency[i]) {
max = emergency[i];
}
}
for(int i=0;i<emergency.length;i++) {
if(max==emergency[i]) {
answer[i] = idx;
emergency[i] = 0;
idx++;
}
}
n--;
}
return answer;
}
}
배열에서 max값을 구한 후, max값의 인덱스값을 answer배열에 넣었다. 이후 해당 max값은 다음 반복문을 통해 0으로 초기화했다. 이러면 다음 while반복에는 max값이 바뀌게 되고 answer배열에는 결국 진료 순서가 담기게 된다.
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
n | result |
---|---|
20 | 6 |
100 | 9 |
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1;i<=n;i++){
if(n%i==0) {
answer++;
}
}
return answer;
}
}
n의 약수의 개수를 구하는 문제이다.
출처 : https://school.programmers.co.kr/learn/challenges
이미지 출처 : 작가 storyset 출처 Freepik