프로그래밍/Algorithm 35

[프로그래머스] 하노이의 탑

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 재귀의 가장 대표적인 예 n개의 원판을 목표 기둥으로 옮기기 위해서는 n번째를 옮기기 전에 1번째부터 n - 1번째까지의 원판이 남은 기둥에 모두 옮겨져 있어야 n번째 원판을 목표 기둥으로 옮길 수 있음 그리고 남은 기둥에 옮겨져 있던 1번째부터 n - 1번째까지의 원판을 목표 기둥의 n번째 원판 위로 옮겨야 함 재귀 함수의 구분을 1번째부터 n - 1번째까지의 묶음과 n..

[프로그래머스] 귤 고르기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 귤의 각각의 크기의 수를 취합하여 크기의 수가 가장 낮은 순서대로 귤을 제거 한 후 귤의 크기 종류의 수를 반환 import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; public class Q30_138476 { public int solution(int k, int[] tanger..

[프로그래머스] 점 찍기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/140107 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 찍을 수 있는 점괴 (0, 0)점의 거리를 모두 구하면서 찍을 수 있는 점을 구하는 것은 효율적이지 못함 x좌표와 d의 거리에 따라서 y좌표의 최대값을 구한 다음에 그 사이에서 k의 배수의 점의 갯수를 구하는 방법으로 풀이 또한 d의 값의 범위로 인하여 제곱 하는 경우 오버플로우가 발생 하기 때문에 long 타입으로 처리 public class Q30_140107 { p..

[프로그래머스] 가장 가까운 같은 글자

문제 https://school.programmers.co.kr/learn/courses/30/lessons/142086 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 문자열 0번째부터 진행 하면서 앞쪽의 같은 문자의 유무를 탐색하게 되면 이중 루프로 구현을 해야 하며 그렇게 된다면 최악의 시나리오에서 효율성이 좋지 않음 문자열을 0번째부터 그 문자와 index를 저장하는 Map을 활용하여 현재 index와 해당 문자의 바로 전 index를 Map에서 조회하여 처리 import java.util.HashMap; import java.u..

[프로그래머스] 문자열 나누기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/140108 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 별도의 풀이가 있는 것이 아니고 문제 설명대로 구현 public class Q30_140108 { public int solution(String s) { String[] list = s.split(""); int length = list.length; if (length == 0) { return 0; } int answer = 0; int index = 0; int ..

[프로그래머스] 명예의 전당 (1)

문제 https://school.programmers.co.kr/learn/courses/30/lessons/138477 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 상위 k번째 점수와 당일 노래의 점수와 비교하여 최저점의 목록을 반환해야 하므로 점수를 비교 할 목적의 배열을 k + 1 길이로 선언한 다음에 노래의 점수가 0점이 존재 하므로 0점을 고려하여 -1로 초기화 당일 노래의 점수를 0번째에 할당하고 오름차순으로 정렬하면 점수 비교 배열에서 1번째에서 k번째 사이에서 -1이 아닌 점수 중 가장 낮은 점수가 그 날의 명예의 전당..

[프로그래머스] 행렬의 곱셈

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 일반적인 행렬의 곱셈을 그대로 구현 public class Q30_12949 { public int[][] solution(int[][] arr1, int[][] arr2) { int xLength = arr1.length; int yLength = arr2[0].length; int zLength = arr2.length; int[][] answer = new int[x..

[프로그래머스] N개의 최소공배수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 최소 공배수는 유클리드 호제법을 이용하여 0번째 수와 1번째 수의 최소 공배수를 구한 후 최소 공배수와 2번째 수의 최소 공배수를 구하고 이를 반복하여 배열의 마지막 까지 최소 공배수를 구하여 반환 import java.util.Arrays; public class Q30_12953 { public int solution(int[] arr) { Arrays.sort(arr..

[프로그래머스] 큰 수 만들기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 k개를 제거 하여 가장 큰 수를 만들어야 한다면 number 문자열의 0번째에서 k번째 사이의 가장 큰 수의 앞 문자열을 제거 가장 큰 숫자가 여러개 있는 경우에는 index가 가장 0에 가까운 자리의 앞 문자열을 제거 제거한 문자열의 길이 만큼 k에서 차감 k가 0이 될 때까지 진행 public class Q30_42883 { public String solution(S..

[프로그래머스] 구명보트

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 및 풀이 구명보트에는 최대 두 명까지 탑승 가능 남은 사람 중 가장 무거운 사람을 먼저 태우고, 남은 사람 중에 가장 가벼운 사람을 태울 수 있으면 두 명 승선 가능 모든 사람을 승선 할 때까지 위를 반복 import java.util.Arrays; public class Q30_42885 { public int solution(int[] people, int limit) { in..