코딩테스트-알고리즘/도전

2024.01.07 - 10문제

닉네임생각즁 2024. 1. 7. 16:59

 

배열 만들기 4

https://school.programmers.co.kr/learn/courses/30/lessons/181918

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        Stack<Integer> stack = new Stack<>();
        int i = 0;
        
        while(i<arr.length) {
            if(stack.isEmpty()) {
                stack.push(arr[i]);
                i++;
            } else {
                if(stack.peek() < arr[i]) {
                    stack.push(arr[i]);
                    i++;
                } else {
                    stack.pop();
                }
            }
        }
        
        int[] stk = new int[stack.size()];
        for(int j=stk.length-1; j>=0; j--) {
            stk[j] = stack.pop();
        }
        return stk;
    }
}

 

 

배열 만들기 5

https://school.programmers.co.kr/learn/courses/30/lessons/181912

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        List<Integer> list = new ArrayList<>();   
        
        for(String str : intStrs) {
            int n = Integer.parseInt(str.substring(s, s+l));
            if (n > k) list.add(n);
        }
        
        int[] answer = new int[list.size()];
        int n = 0;
        for(int i : list) {
            answer[n] = i;
            n++;
        }
               
        return answer;
    }
}

 

 

배열 만들기 6

https://school.programmers.co.kr/learn/courses/30/lessons/181859

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        Stack<Integer> list = new Stack<>();
        int i = 0;
        while(i < arr.length) {
            if(list.isEmpty()) {
                list.push(arr[i]);
                i++;
            } else {
                if (list.peek() == arr[i]) {
                    list.pop();
                    i++;
                } else {
                    list.push(arr[i]);
                    i++;
                }
            }
        }        
        int[] answer = {};
        if(list.isEmpty()) {
            answer = new int[]{-1};
        } else {
            answer = new int[list.size()];
            for (int j = list.size()-1; j >=0; j--) {
                    answer[j] = list.pop();
            }
        }   
        
        return answer;
    }
}

 

 

무작위로 K개의 수 뽑기

https://school.programmers.co.kr/learn/courses/30/lessons/181858 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int k) {
        List<Integer> list = new ArrayList<>();
        int[] answer = new int[k];
        list.add(arr[0]);
        
        for(int i=1; i<arr.length; i++) {
            if(!list.contains(arr[i])) {
                list.add(arr[i]);
                if(list.size() == k) break;
            }
        }
        
        if(list.size() != k) {
            while(list.size() < k) {
                list.add(-1);
            }
        }
        
        for(int i=0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

 

 

문자열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/181905

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public String solution(String my_string, int s, int e) {
        String answer = "";
        StringBuffer sb = new StringBuffer(my_string.substring(s, e+1));
        String reverse = sb.reverse().toString();
        
        answer = my_string.substring(0, s) + reverse + my_string.substring(e+1);
        return answer;
    }
}

 

 

꼬리 문자열

https://school.programmers.co.kr/learn/courses/30/lessons/181841

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public String solution(String[] str_list, String ex) {
        String answer = "";
        
        for(String s : str_list) {
            if(!s.contains(ex)) {
                answer += s;
            }
        }        
        return answer;
    }
}

 

 

수열과 구간 쿼리 1

https://school.programmers.co.kr/learn/courses/30/lessons/181883

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for(int i=0; i<queries.length; i++) {
            int s = queries[i][0];
            int e = queries[i][1];
            
            for(int j=s; j<=e; j++) {
                arr[j] += 1;
            }
        }
        return arr;
    }
}

 

 

특별한 이차원 배열 1

https://school.programmers.co.kr/learn/courses/30/lessons/181833

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                if(i==j) {
                    answer[i][j] = 1;
                } else {
                    answer[i][j] = 0;
                }
            }
        }        
        
        return answer;
    }
}

 

다른사람 풀이

	int[][] answer = new int[n][n];
        for(int i = 0 ; i < n ; i++) {
            answer[i][i] = 1;
        }
        return answer;

이렇게 간단히 할 수 있었다 아무값도 안넣으면 0 채워지니까,,!  이런😦

 

 

문자열 바꿔서 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/181864

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        String result = "";
        
        for (int i=0; i<myString.length(); i++) {
            if (myString.charAt(i) == 'A') result += "B";
            else result += "A";
        }
        
        if(result.contains(pat)) answer = 1;
        
        return answer;
    }
}

 

처음에는 charAt() 메서드를 이용해서 값을 확인하고 예를 들어 myString.charAt(i)  =='A' 이면 myString.charAt(i) = 'B' 이런식으로 바로 값을 바꿔주려했는데 오류가 났다

charAt() 메서드는 문자를 반환하긴하지만 직접 새 값을 할당할 수는 없기 때문이다..!! 그래서 새로운 문자열 생성해준 후 거기에 더해가는식으로 바꿔주었다

 

 

정사각형으로 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/181830

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public int[][] solution(int[][] arr) {
        int[][] answer;
        
        if(arr.length == arr[0].length) {
            answer = arr;
        } else {
            if(arr.length > arr[0].length) {
                answer = new int[arr.length][arr.length];
                for(int i=0; i<arr.length; i++) {
                    for(int j=0; j<arr[0].length; j++) {
                        answer[i][j] = arr[i][j];
                    }
                }
            } else {
                answer = new int[arr[0].length][arr[0].length];
                for(int i=0; i<arr.length; i++) {
                    for(int j=0; j<arr[0].length; j++) {
                        answer[i][j] = arr[i][j];
                    }
                }
            }
        }
        
        
        return answer;
    }
}

 

다른사람 풀이

	int N = Math.max(arr.length, arr[0].length);
        int[][] answer = new int[N][N];
        for (int i = 0;i < N;i++) {
            for (int j = 0;j < N;j++) {

나눠서 쓰지않고 그냥 둘 중 최대값을 배열길이로 놓고 하면 더 간단한 코드도 가능한거였다

'코딩테스트-알고리즘 > 도전' 카테고리의 다른 글

2024.01.09 - 9문제  (0) 2024.01.09
2024.01.08 - 18문제  (0) 2024.01.08
2024.01.06 - 4문제  (1) 2024.01.06
2024.01.05 - 5문제  (1) 2024.01.05
2023.12.31 - 5문제  (0) 2023.12.31