본문 바로가기

알고리즘 문제풀이/프로그래머스16

[프로그래머스] n진수 게임 - 자바(Java), 2018 KAKAO BLIND RECRUITMENT 문제 https://programmers.co.kr/learn/courses/30/lessons/17687 풀이 코드 정수를 특정 진법으로 변환한 문자열을 반환해 주는 convert()메서드를 사용해서 t번째 튜브의 순서가 포함된 숫자까지 구한 후, 튜브가 말해야 되는 순서의 숫자들을 문자열로 만들어 반환한다. public class Solution { public String solution(int n, int t, int m, int p) { StringBuilder sb = new StringBuilder(); //t번째 튜브의 순서 int limit = m*(t-1) + p; int i = 0; //t번째 튜브의 순서가 포함된 숫자까지만 구한다. while(sb.length() < limit) {.. 2022. 1. 12.
[프로그래머스] 땅따먹기 - 자바(Java), DP(Dynamic Programming) 문제 https://programmers.co.kr/learn/courses/30/lessons/12913 풀이 DFS를 사용해 완전 탐색으로 풀이하면 시간 초과로 실패하기 때문에, DP(Dynamic Programming)를 사용하여 풀이해야 한다. import java.util.*; class Solution { int solution(int[][] land) { int n = land.length; for(int i = 1; i < n; i++) { //land[i][j] : i행 j열로 내려왔을 때의 최대 값 land[i][0] += Math.max(land[i-1][1], Math.max(land[i-1][2], land[i-1][3])); land[i][1] += Math.max(land[i-.. 2022. 1. 10.
[프로그래머스] 최솟값 만들기 - 자바(Java) 문제 https://programmers.co.kr/learn/courses/30/lessons/12941 풀이 두 배열 중 하나는 오름차순 정렬, 남은 하나는 내림차순 정렬한 뒤 같은 인덱스끼리 곱한 합이 최솟값이다. import java.util.*; class Solution { public int solution(int []A, int []B) { int answer = 0; //reverseOrder() 를 사용하려면 래퍼 타입이어야하기 때문에 int[] -> Integer[] 변환 //boxed() : 프리미티브 타입을 래퍼 타입으로 박싱한 스트림을 만들어준다. Integer[] BB = Arrays.stream(B).boxed().toArray(Integer[]::new); Arrays.so.. 2022. 1. 8.
[프로그래머스] 피보나치 수 - 자바(Java), 메모이제이션 문제 https://programmers.co.kr/learn/courses/30/lessons/12945 풀이 n이 최대 100000이기 때문에 엄청나게 큰 수가 만들어지게 되어 일반적인 피보나치를 계산하는 로직으로는 오버플로우가 발생하게 된다. 그렇기 때문에 fibo[n]%1234567 = (fibo[n-1] + fibo[n-2])%1234567 식을 활용하여 코드를 작성한다. 또한 메모이제이션을 사용하여 시간 초과를 방지한다. import java.util.*; class Solution { int[] fibo; public int solution(int n) { fibo = new int[n+1]; return dfs(n); } private int dfs(int n) { if(fibo[n] > .. 2022. 1. 4.
[프로그래머스] 카펫 - 자바(Java) 문제 https://programmers.co.kr/learn/courses/30/lessons/42842 풀이 코드 public class Main { public int[] solution(int brown, int yellow) { //column, row : 노란 격자 컬럼, 행 길이 for(int column = 1; column yellow/column*2 + column*2 + 4 = (yellow/column + column)*2 + 4 = brown */ if(yellow%column == 0 && ((row+column)*2 + 4) == brown) { return new int[] {row+2, column+2}; } } return null; } } 2022. 1. 3.
[프로그래머스] 튜플 - 자바(Java), 2019 카카오 개발자 겨울 인턴십 문제 https://programmers.co.kr/learn/courses/30/lessons/64065 풀이 코드 주어진 집합을 길이를 기준으로 오름차순으로 정렬하여 길이가 제일 짧은 집합부터 순차적으로 모든 집합의 원소들을 순서를 유지하면서 중복을 허용하지 않는 LinkeHashSet에 add 해주면 튜플이 만들어지고 배열로 변환하여 반환하면 된다. import java.util.*; class Solution { public int[] solution(String s) { List list = new ArrayList(); //괄호를 제거하여 각 집합을 숫자와 ,로 이루어진 문자열로 만든다. int start = 2; for(int end = 2; end < s.length()-1; end++) .. 2021. 10. 22.