2024. 4. 3. 17:45ㆍ코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java
문제.1 - 수열과 구간 쿼리 4
https://school.programmers.co.kr/learn/courses/30/lessons/181922
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 배열 arr와 2차원 정수 배열 queries 이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며 [ s, e, k ] 꼴입니다. 각 query마다 순서대로 s <= i <= e 인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다. 위 규칙에 따라 queries를 처리한 이후 arr를 return 하는 solution 함수를 완성해 주세요. 제한사항 1 <= arr.length <= 1000 0 <= arr의 요소 <= 1000000 1 <= queries.length <= 1000 0 <= s <= e < arr.length 0 <= k <= 5 |
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = arr;
for( int[] query : queries ) {
for ( int i = query[0]; i <= query[1]; i++ ) {
if ( i % query[2] == 0 ) answer[i]++;
}
}
return answer;
}
}
문제.2 - 배열 만들기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제설명 정수 l 과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해주세요. 제한사항 1 <= l <= r <= 1000000 |
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> answer = new ArrayList<>();
// 시작 위치 잡기 5의 배수
int start = 0;
if ( l <= 5 ) start = 5;
else if ( l > 5)
for ( start = l; start % 5 != 0; start++ );
// 숫자가 나눠질 때 0 혹은 1밖에 나오지 않음
// ex) 5 => 1 ( 통과 ), 10 => 2 ( 아웃 ), 555 => 111
// 조건 확인
for ( int i = l; i <= r; i+= 5) {
boolean isCheck = true;
int temp = i / 5;
while (temp != 0) {
if (temp % 10 > 1) isCheck = false;
temp /= 10;
}
if (!isCheck) continue;
answer.add(i);
}
if ( answer.size() == 0) answer.add(-1);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
풀이 해석
배열에 값을 추가를 하기 위해서 ArrayList 를 사용했습니다.
저는 다른 유형이지만 10진수를 2진수로 바꿔주는 c언어 코딩을 한적이 있습니다.
해당 문제도 보면 결국 정답 배열에는 5과 0 이 들어간 숫자 밖에 들어갈수 없기 때문에 반복문에서 5을 더하여 올렸습니다.
이해를 하기 쉽게 입력 받는 수를 5로 나누면 1 혹은 0 으로만 입력된 숫자만 통과가 될것입니다.
그러니 1 이상 숫자가 입력이 된다면 입력할수 없는 값이기 때문에 isCheck = false가 되는 것입니다.
마지막으로 통과된 숫자만 추가가 되고 마지막 까지 비어져있는 경우는 -1 만 입력되게 됩니다.
참고한 부분
https://velog.io/@jwkim/java-arraylist-array-type-conversion
[Java] ArrayList ↔ Array 변환
[Java] ArrayList와 Array 변환
velog.io
문제.3 - 카운트 업
https://school.programmers.co.kr/learn/courses/30/lessons/181920
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 start_num 와 end_num가 주어질 때, start_num부터 end_num 까지의 숫자를 차례로 담은 리스트를 return 하도록 solution 함수를 완성해주세요. 제한사항 0 <= start_num <= end_num <= 50 |
import java.util.*;
class Solution {
public int[] solution(int start_num, int end_num) {
ArrayList<Integer> answer = new ArrayList<>();
for ( int i = start_num; i <= end_num; i++) answer.add(i);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
문제.4 - 콜라츠 수열 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181919
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1 로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다. 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다. 계산 결과 1000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져있습니다. 임의의 1000보다 작거나 같은 양의 정수 n이 주어질 때, 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해주세요. 제한사항 1 <= n <= 1000 |
import java.util.*;
class Solution {
public int[] solution(int n) {
ArrayList<Integer> answer = new ArrayList<>();
// 콜라츠 수열
while ( n > 1 ) {
answer.add(n);
if( n % 2 == 0 ) n /= 2; // 짝수일 때 계산
else n = 3 * n + 1; // 홀수일 때 계산
}
answer.add(n);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
문제.5 - 배열 만들기 4
https://school.programmers.co.kr/learn/courses/30/lessons/181918
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다. 변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다. 만약 stk가 빈배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다. stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다. stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막원소를 stk에서 제거합니다. 위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요. 제한사항 1 <= arr.length <= 100000 1 <= arr의 원소 <= 100000 |
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
ArrayList<Integer> stk = new ArrayList<>();
for (int i = 0; i < arr.length; ) {
if( stk.size() == 0 )
stk.add(arr[i++]);
else if ( stk.get(stk.size()-1) < arr[i] )
stk.add(arr[i++]);
else stk.remove(stk.size()-1);
}
return stk.stream().mapToInt(Integer::intValue).toArray();
}
}
참고한 곳
https://hianna.tistory.com/565
[Java] ArrayList의 첫번째, 마지막 index 구하기
ArrayList의 첫번째 index는 "0"이고, 마지막 index는 "ArrayList의 길이 - 1" 입니다. 위와 같은 ArrayList가 있고, 이 ArrayList에 5개의 element가 있을 때, ArrayList의 index는 0부터 시작하기 때문에, 첫번째 index는 "
hianna.tistory.com
느낀점
극복하고 왔습니다.
'코딩테스트 리뷰(프로그래머스) > 코딩 기초 트레이닝 with Java' 카테고리의 다른 글
코딩 기초 트레이닝 Day 9 with Java (0) | 2024.05.08 |
---|---|
코딩 기초 트레이닝 Day 8 with Java (2) | 2024.04.15 |
코딩 기초 트레이닝 Day 6 with Java (2) | 2024.03.07 |
코딩 기초 트레이닝 Day 5 with Java (1) | 2024.03.04 |
코딩 기초 트레이닝 Day 4 with Java (0) | 2024.03.03 |