-
[올리브씨의 알고리즘 입문] Day 8 - 배열, 구현, 수학알고리즘/프로그래머스_입문 2024. 4. 16. 01:46
029. 배열 자르기 (난이도 : ★☆☆☆☆)
문제 설명.
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
제한 사항.
- 2 ≤ numbers의 길이 ≤ 30
- 0 ≤ numbers의 원소 ≤ 1,000
- 0 ≤num1 < num2 < numbers의 길이
입출력 예.
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; for(int i=num1 ; i<=num2 ; i++){ answer[j] = numbers[i]; j++; } return answer; } }
다른 풀이.
import java.util.*; class Solution { public int[] solution(int[] numbers, int num1, int num2) { return Arrays.copyOfRange(numbers, num1, num2 + 1); } }
import java.util.Arrays; class Solution { public int[] solution(int[] numbers, int num1, int num2) { int[] answer = Arrays.stream(numbers, num1, num2+1).toArray(); return answer; } }
import java.util.stream.IntStream; class Solution { public int[] solution(int[] numbers, int num1, int num2) { return IntStream.rangeClosed(num1, num2).map(i -> numbers[i]).toArray(); } }
MAIN POINTS.
더보기[개발 포인트]
- java.util.Arrays 패키지
.copyOfRange(배열명, 처음 인덱스, 끝 인덱스);
.stream(배열명, 처음 인덱스, 끝 인덱스).toArray(); - java.util.stream.IntStream 패키지
030. 외계행성의 나이 (난이도 : ★★★☆☆)
문제 설명.
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
제한 사항.
- age는 자연수입니다.
- age ≤ 1,000
- PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.
입출력 예.
age result 23 "cd" 51 "fb" 100 "baa"
풀이.
class Solution { public String solution(int age) { String answer = ""; String temp = String.valueOf(age); int[] ageArr = new int[temp.length()]; for(int i=0; i<temp.length(); i++){ if(temp.charAt(i)==0){ ageArr[i] = 97 ; }else{ ageArr[i] = temp.charAt(i)-'0'+97; } answer += (char)ageArr[i]; } return answer; } }
다른 풀이.
//홍희표님 외 3인 코드 import java.util.stream.Collectors; class Solution { public String solution(int age) { return String.valueOf(age).chars() .mapToObj(operand -> String.valueOf((char) (49 + operand))) .collect(Collectors.joining()); } }
MAIN POINTS.
더보기[개발 포인트]
스트림을 사용할 줄 아는가?
'a' - '0'가 49이기 때문에 49를 더함.
031. 진료 순서 정하기 (난이도 : ★★★★☆)
문제 설명.
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
제한 사항.
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예.
emergency result [3, 76, 24] [3, 1, 2] [1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1] [1, 2, 3, 4, 5, 6, 7] [2, 4, 3, 5, 1]
풀이.
import java.util.HashMap; import java.util.Arrays; class Solution { public int[] solution(int[] emergency) { int length = emergency.length; int[] answer = new int[length]; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); int a = 0; //1. array 복제해서 sort 오름차순 정렬 int[] copyArr = Arrays.copyOf(emergency, length); Arrays.sort(copyArr); //2. map 형식으로 진료순서 순차 나열 (key: emergency / value: 순위) for(int j=length; j>0; j--){ map.put(copyArr[a], j); a++; } //3. emergency 를 key 값으로 map에서 순위를 빼와서 answer array에 저장한다. for(int i=0; i<emergency.length; i++){ answer[i] = map.get(emergency[i]); } return answer; } }
다른 풀이.
import java.util.Arrays; import java.util.Comparator; import java.util.stream.Collectors; class Solution { public int[] solution(int[] e) { return Arrays.stream(e).map(i -> Arrays.stream(e).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).indexOf(i) + 1).toArray(); } }
MAIN POINTS.
더보기[개발 포인트]
- Array와 Map/HashMap을 사용할 줄 아는가?
/* 배열 복사 2가지 방법 (*Arrays.copyOf 가 두 배가량 빠르다고 함.)
1. System.arraycopy();
: 새로운 배열을 생성가능, 전부 복사하거나 복사 대상의 객체를 유지시킬 필요가 없을 때 사용 추천.구문 : System.arraycopy(원본배열, 원본배열 복사시작 index, 복사배열, 복사배열 시작index, 복사할 요소 개수)
2. Arrays.copyOf();
: 복사의 길이를 명시, 객체를 유지하고자 할 때 사용 추천.구문 : Arrays.copyOf(원본배열, 원본으로부터 복사해 올 길이) */
/* HashMap & Iterator 연습 */
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
//[PUT] How to put in key&value at HashMap.
map.put(21, 42);
//[GET] How to get key&value from HashMap.
Integer key = 21
Integer value = map.get(key);
System.out.println("Key: " + key +" value: "+ value);
//Key: 21 value: 42
//If you want to iterate through data you need to define an iterator:
Iterator<Integer> iterator = map.keySet().iterator();
while(iterator.hasNext()){
Integer key = iterator.next();
System.out.println("key: " + key + " value: " + map.get(key));
}
032. 순서쌍의 개수 (난이도 : ★☆☆☆☆)
문제 설명.
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
제한 사항.
- 1 ≤ n ≤ 1,000,000
입출력 예.
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; } }
다른 풀이.
import java.util.stream.IntStream; class Solution { public int solution(int n) { return (int) IntStream.rangeClosed(1, n).filter(i -> n % i == 0).count(); } }
MAIN POINTS.
더보기[개발 포인트]
약수를 찾는 방법.
출처 :https://school.programmers.co.kr/ 입문 알고리즘
https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc&languages=java
'알고리즘 > 프로그래머스_입문' 카테고리의 다른 글
[올리브씨의 알고리즘 입문] Day 9 - 수학, 문자열, 해시, 완전탐색, 조건문 (0) 2024.04.24 [올리브씨의 알고리즘 입문] Day 7 - 문자열, 조건문, 수학, 반복문 (0) 2024.04.04 [올리브씨의 알고리즘 입문] Day 6 - 문자열, 반복문, 출력, 배열, 조건문 (0) 2024.04.03 [올리브씨의 알고리즘 입문] Day 5 - 수학, 배열 (0) 2024.03.29 [올리브씨의 알고리즘 입문] Day 4 - 수학, 배열 (0) 2024.03.27