기록
[프로그래머스,Level 2] 기능개발(JAVA 구현)
- 첫 풀이 및 정답풀이 이 문제를 간단하게 요약해보자면, 기능을 개발을 완료하는 수치가 100일 때, 미완성된 기능의 개발 정도를 progress배열에 담아 전달해준다. 이 기능들은 진행률이 100이 되면 기능을 배포할 수 있게 된다. 이때, 각 기능을 하루에 개발할 수 있는 속도가 speeds에 담아 전달받는다. 각 기능은 이 speeds의 수치만큼 하루에 진행된다. 위의 내용을 통해 구할 수 있는 식은 각 기능을 개발 완료하는 데 걸리는 시간이다. (100 - 각 진행률) / 기능의 개발속도 를 통해 100이 되는 일 수를 구할 수 있는데 이때, 나누어 떨어지지 않는 일 수는 +1을 해주는 것을 잊으면 안 된다. 이렇게 구한 각 기능의 개발이 완료되는 일 수를 큐에 삽입한다. 큐를 사용한 이유는 앞..
[프로그래머스,Level 2] 다리를 지나는 트럭 (JAVA 구현)
- 첫 풀이 처음에는 2차원 배열을 활용해 각 트럭이 통과한 시간을 별도로 저장해 모든 처리과정 후, 각 트럭이 다리를 건너는데 걸린 시간을 모두 더하는 방식으로 풀이하고자 하였다. 그러나 실패. 검색을 통해 대략적인 포인트를 확인하고 다시 풀어보았다. - 정답 풀이 이 문제의 핵심은 다리의 길이라고 생각된다. 입력 예제 1번의 경우 다리의 길이는 2로 총 2대의 트럭이 다리에 올라갈 수 있는데, 이 과정에서 다리가 견딜 수 있는 하중을 고려해주는 것이 포인트 같다. 또한 애초에 문제에서 원하는 답이 모든 트럭이 다리를 지나는데 걸리는 최소 시간이므로, 다리가 견딜 수 있는 하중은 모든 트럭을 견딜 수 있게 주어진다. 고려해야 하는 경우의 수는 아래와 같다. 1. 첫 번째 트럭이 올라가는 경우 => 트럭..
[프로그래머스,Level 2] 멀쩡한 사각형 (JAVA 구현)
- 첫 풀이 그림을 보고 규칙성은 발견하기는 했지만, 이를 어떻게 이용해야 할지 몰라 검색을 통해 알아냈다. 아래 블로그에 잘 설명되어 있다. [프로그래머스] 멀쩡한 사각형 문제풀이 (Java) 프로그래머스 멀쩡한 사각형 문제풀이 velog.io class Solution { // 최대공약수 public static long gcd(long x, long y){ long temp; long a = x>y ? x: y; long b = x>y ? y : x; while(a%b !=0){ temp = b; b = a%b; a = temp; } return b; } public long solution(long w, long h) { long answer = w * h; long gcd_v = gcd(w,h)..
[프로그래머스,Level 2] 스킬트리 (JAVA 구현)
- 첫 풀이 및 정답풀이 이 문제를 처음 풀 때 든 생각은 skill_trees로 주어지는 문자열들의 한 글자를 기준으로 skill 문자열에서 해당 문자 이전의 모든 선행 스킬들의 방문 여부를 체크하고자 했다. 예를 들어 BACDE에서 첫 글자인 B는 1. skill 문자열에 포함되며, 2. 선행스킬인 C의 방문 여부를 체크 (여러 개면 모두 체크) 이와 같은 방식은 반복문을 3번이나 사용하고 코드 자체도 복잡해져 다른 방법을 생각해 보았다. 다시 생각해본 풀이는 선행스킬만을 생각했을 때, 한 스킬을 배우기 이전의 스킬이 배워져 있다면 모든 선행 스킬이 모두 만족한 것이기 때문에 한 스킬의 이전 선행 스킬의 방문 여부만 체크하면 될 것 같다고 생각했다. 예를 들어 CBADF에서 C는 skill 문자열의 ..
[프로그래머스,Level 2]124 나라의 숫자(JAVA 구현)
- 정답 풀이 이 문제는 처음 봤을 때 어떻게 풀어야 할지 감이 잡히지 않아 검색을 통해 알아보았다. 자세한 설명은 아래 블로그를 참고 바란다. [프로그래머스] 124 나라의 숫자 (Java) 프로그래머스 124 나라의 숫자(https://programmers.co.kr/learn/courses/30/lessons/12899최악의 경우 n이 5억이다. 따라서 하나씩 숫자를 올려가며 하는 것은 불가하다. 숫자가 1, 2, 4 세 가지만 존재하니까 n을 velog.io class Solution { public String solution(int n) { String answer = ""; String[] str = {"4","1","2"}; while(n>0){ // 1. 나눈 나머지에 따라 해당 값을 문..
[프로그래머스,Level 1] 다트 게임(JAVA 구현)
- 첫 풀이 및 정답풀이 조금만 생각해보면 간단하게 풀 수 있는 문제인 것 같다. 문제에서 제시하고 있는 조건에 따라 적절하게 처리를 해주면 된다. class Solution { public int solution(String dartResult) { int answer = 0; String temp = ""; // 문자열 내 1번의 점수 저장 변수 int arr[] = new int[3]; // 3번의 점수를 저장할 배열 int idx = 0; // 배열을 참조하기 위한 idx // 1. dartResult 문자열 탐색. for(int i = 0;i1) arr[idx-2]*=2; break; // 1-3. #은 자신의 점수를 음수로 만든다. case '#': arr[idx-1]*=-1; break; /..
[프로그래머스,Level 1] 실패율(JAVA 구현)
- 첫 풀이 및 정답풀이 문제의 지문이 길지만, 문제 자체는 상당히 간단하다. 사용자들이 위치한 스테이지 정보가 담긴 stages배열이 주어지며, 최대 스테이지 수로 N이 주어진다. 실패율 = 한 스테이지에 위치한 사용자 수 / 한 스테이지에 도달한 사용자 수라는 정의를 이용하게 된다. 필자는 이를 우선 1번 예제를 토대로 표를 그려보았으며, 아래가 그 표이다. 스테이지 막힌 사용자 해당 스테이지를 도달한 사용자 수 1 1 8 2 3 7 3 2 4 4 1 2 5 0 1 막힌 사용자 수는 stages 배열의 원소로 주어진 정수들을 카운팅 하면 구할 수 있고, 해당 스테이지를 도달한 사용자 수는 막힌 스테이지가 해당 스테이지보다 높다면 이미 도달한 것이기 때문에 그 수를 카운팅 하면 된다. 표를 보면 알 수..
[프로그래머스,Level 1] 비밀지도(JAVA 구현)
- 첫 풀이 및 정답풀이 이 문제를 처음 풀 때 이진수를 변환하는 메서드의 존재에 대해서는 알고 있었지만, 찾아보지 않고 한 번 풀어본 뒤 관련 정보를 찾아 다시 풀어보고자 했다. 필자가 풀어본 방식은 지도의 한 줄에 해당하는 arr1,arr2의 정수를 추출해 직접 이진수로 변환해 풀어보고자 했다. class Solution { // 1. 이진수 변환 메소드 및 자리수 n에 맞게 0을 채우기. public static String cal(int n,int len){ String str=""; // 1-1. 이진수 변환. while(n != 0){ str = n%2 + str; n/=2; } // 1-2. n 자릿수 채우기. while(str.length() != len){ str = "0"+str; } ..
[프로그래머스,Level 1] 예산(JAVA 구현)
- 첫 풀이 및 정답풀이 간단한 문제라고 생각된다. 최대한 많은 부서를 지원하기 위해서는 가장 적은 예산을 요청한 부서들부터 순차적으로 지원해주면 된다. import java.util.Arrays; class Solution { public int solution(int[] d, int budget) { int answer = 0; int sum = 0; // 1. 예산 요청 정렬. Arrays.sort(d); // 2. 요청한 예산
[프로그래머스,Level 1] 키패드 누르기(JAVA 구현)
- 첫 풀이 처음에는 이 문제에서 가운데 번호를 누르기 위해서 왼쪽, 오른쪽 손의 거리 차이에 따라 누루는 손이 결정된다는 것을 보고 bfs를 이용해 풀어보려고 했지만, 잘 해결되지 않아 검색을 통해 다른 분들의 풀이를 참고하였다. - 정답풀이 다른 분들의 주된 풀이로는 '맨해튼 거리 측정법'이었다. 관련 내용에 대해 간단히 찾아본 결과 맨해튼 거리 측정법은 유클리드 거리 측정법과는 다르게 점 A와 점 B의 사이에 장애물이 존재해 정해진 경로로만 이동이 가능하다는 차이점이 존재한다. 예를들어 왼손이 1번에 위치한 상태에서 5번을 누르기 위해서는 1-> 2-> 5 또는 1-> 4-> 5와 같이 대각선으로의 직접적인 이동이 불가능한 경우를 말한다. 맨해튼 거리 측정법의 공식은 |각 점의 X좌표 차이| + |..