코테/프로그래머스(Programmers)
[프로그래머스,Level 2] 주식가격(JAVA 구현)
- 첫 풀이 및 정답풀이 문제에서 주어지는 prices배열은 1초가 지난 시점의 주식 가격이 담겨 전달되며, 문제에서 원하는 리턴 값은 각 초에 기록된 주식 가격이 몇 초 뒤에 낮아지는지에 대한 값이다. 시간은 뒤로 가지 않기 때문에 하나의 기준점을 잡고 해당 기준점의 나중에 기록된 주식가격을 비교해보면 된다. ex) 1초의 가격 1 기준으로 2초,3초....5초의 가격들과 비교한다. 리턴 값을 구하는 것은 비교지점의 인덱스 - 기준점의 인덱스로 구할 수 있으며 가격이 낮아지는 경우는 n초 뒤의 가격이 낮아지는 순간에 반복문을 벗어나면 구할 수 있다. class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.l..
[프로그래머스,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. 요청한 예산