티스토리 뷰

#  배열 만들기 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