티스토리 뷰
# 배열 만들기 1
문제 설명
정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ n ≤ 1,000,000
1 ≤ k ≤ min(1,000, n)
입출력 예 설명
입출력 예 #1
1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.
입출력 예 #2
1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.
나의 답변
class Solution {
public int[] solution(int n, int k) {
int[] answer = new int[n/k];
int index = 0;
for(int i=1; i<=n; i++){
if(i%k==0){
answer[index++] = i;
}
}
return answer;
}
}
나는 배열과 index를 사용하여 코드를 작성하였다.
ArrayList를 사용하여 코드를 작성하는 방법도 있다.
ArrayList를 사용하면 동적으로 크기를 조정한다.
그렇기 때문에 처음에 정확한 배열 크기를 알 필요 없이 조건에 맞는 값을 추가할 수 있다.
나중에 ArrayList를 배열로 변환하여 반환할 수 있다.
import java.util.ArrayList;
class Solution {
public int[] solution(int n, int k) {
ArrayList<Integer> multiples = new ArrayList<>();
for (int i = k; i <= n; i += k) {
multiples.add(i);
}
int[] answer = new int[multiples.size()];
for (int i = 0; i < multiples.size(); i++) {
answer[i] = multiples.get(i);
}
return answer;
}
}
1. ArrayList<Integer> multiples = new ArrayList<>();:
ArrayList를 생성하여 k의 배수를 저장한다.
2. for (int i = k; i <= n; i += k) {:
k부터 n까지 k 간격으로 반복문을 돌며 k의 배수를 ArrayList에 추가한다.
3. multiples.add(i);:
i 값을 ArrayList에 추가한다.
4. int[] answer = new int[multiples.size()];:
ArrayList의 크기만큼의 배열을 생성한다.
5. for (int i = 0; i < multiples.size(); i++) {:
ArrayList의 값을 배열에 복사한다.
6. answer[i] = multiples.get(i);:
ArrayList의 값을 배열에 복사한다.
7. return answer;:
최종 배열을 반환한다.
이 방법은 동적 배열 크기 조절을 사용하여 배열 크기를 정확하게 조절할 수 있는 장점이 있다.
# 코드처리하기
문제 설명
문자열 code가 주어집니다.code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다.
mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
mode가 1일 때code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
제한사항
1 ≤ code의 길이 ≤ 100,000
code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.
나의 답변
class Solution {
public String solution(String code) {
String answer = "";
int mode = 0;
for(int idx=0; idx<code.length(); idx++){
if(code.charAt(idx)=='1' && mode==0){
mode = 1;
}
else if(code.charAt(idx)=='1' && mode==1){
mode = 0;
}
if(mode == 0){
if(code.charAt(idx)!='1' && idx%2==0){
answer += code.charAt(idx);
}
}
else if(mode == 1){
if(code.charAt(idx)!='1' && idx%2==1){
answer += code.charAt(idx);
}
}
}
if(answer.isEmpty()){
answer = "EMPTY";
}
return answer;
}
}
# 수열과 구간 쿼리 2
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한사항
1 ≤ arr의 길이 ≤ 1,000
0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
0 ≤ s ≤ e < arr의 길이
0 ≤ k ≤ 1,000,000
입출력 예 설명
입출력 예 #1
첫 번째 쿼리의 범위에는 0, 1, 2, 4, 3이 있으며 이 중 2보다 크면서 가장 작은 값은 3입니다.두 번째 쿼리의 범위에는 0, 1, 2, 4가 있으며 이 중 2보다 크면서 가장 작은 값은 4입니다.세 번째 쿼리의 범위에는 0, 1, 2가 있으며 여기에는 2보다 큰 값이 없습니다.따라서 [3, 4, -1]을 return 합니다.
나의 답변
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
Arrays.fill(answer,-1);
for(int i=0; i<queries.length; i++){
int s = queries[i][0];
int e = queries[i][1];
int k = queries[i][2];
int min = Integer.MAX_VALUE;
boolean found = false;
for(int j=s; j<=e; j++){
if(arr[j] > k && arr[j] < min){
min = arr[j];
found = true;
}
}
if(found){
answer[i] = min;
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length]; // 쿼리 결과를 저장할 배열을 초기화합니다.
Arrays.fill(answer, -1); // 결과 배열을 -1로 초기화합니다.
// 각 쿼리에 대해 반복합니다.
for (int i = 0; i < queries.length; i++) {
int s = queries[i][0]; // 쿼리의 시작 인덱스
int e = queries[i][1]; // 쿼리의 종료 인덱스
int k = queries[i][2]; // 비교할 기준 값
int min = Integer.MAX_VALUE; // 최소값을 찾기 위해 초기값을 무한대로 설정합니다.
boolean found = false; // 조건을 만족하는 값이 있는지 여부를 추적하기 위한 변수
// 구간 [s, e] 내의 값을 반복합니다.
for (int j = s; j <= e; j++) {
if (arr[j] > k && arr[j] < min) { // arr[j]가 k보다 크고 현재 min 값보다 작으면
min = arr[j]; // min 값을 업데이트합니다.
found = true; // 조건을 만족하는 값을 찾았음을 표시합니다.
}
}
// 조건을 만족하는 값을 찾았을 경우 결과 배열에 최소값을 저장합니다.
if (found) {
answer[i] = min;
}
}
return answer; // 최종 결과 배열을 반환합니다.
}
# 수열과 구간 쿼리 3
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ arr의 길이 ≤ 1,000
0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
0 ≤ i < j < arr의 길이
입출력 예 설명
입출력 예 #1
각 쿼리에 따라 arr가 다음과 같이 변합니다.
arr
[0, 1, 2, 3, 4]
[3, 1, 2, 0, 4]
[3, 2, 1, 0, 4]
[3, 4, 1, 0, 2]
따라서 [3, 4, 1, 0, 2]를 return 합니다.
이 문제는 정수 배열 arr와 여러 개의 쿼리 배열 queries가 주어질 때, 각 쿼리마다 배열 arr의 두 요소를 교환하는 작업을 수행하는 것이다. 각 쿼리는 [i, j] 형태로 주어지며, 이는 arr 배열에서 인덱스 i와 j의 값을 서로 바꾸라는 의미이다. 모든 쿼리를 순서대로 처리한 후 최종 배열을 반환해야한다.
나의 답변
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int a,b,temp;
for(int i=0; i<queries.length; i++){
a = queries[i][0];
b = queries[i][1];
temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
return arr;
}
}
다른 풀이
public class Solution {
public int[] solution(int[] arr, int[][] queries) {
for (int[] query : queries) {
int i = query[0];
int j = query[1];
// arr[i]와 arr[j]의 값을 서로 바꿉니다.
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
'코딩 > 프로그래머스' 카테고리의 다른 글
[SQL - SELECT] 3 (0) | 2024.06.20 |
---|---|
코딩테스트 입문 #81 ~ #85 (0) | 2024.06.18 |
[SQL - SELECT] 2 (1) | 2024.06.14 |
코딩테스트 입문 #71 ~ #76 (0) | 2024.06.13 |
코딩테스트 입문 #65 ~ #70 (0) | 2024.06.12 |
- Total
- Today
- Yesterday