[프로그래머스,Level 2] 카카오프렌즈 컬러링북(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 우선 주의해야 할 점은 이 문제는 예제 입출력으로 주어진 데이터와 실제 예제 코드를 실행시켰을 때 다른 데이터가 들어온다. 보이는 바와 같이 문제에서 설명하고 있는 예제 입출력과 다른 것을 확인할 수 있다. 그렇기 때문에 코드를 짤 때 이를 참고하고 짜는 것이 좋을 것 같다. 본인은 문제에서 제시하는 예제를 바탕으로 짰는데 다른 결과가 나와 놀랐기는 했지만, 어쨌든 제대로 동작하였다. 또한 필자는 문제를 이해하는 데 시간이 좀 걸렸는데, 자세히 설명이 안 나와 있어 그런지 아니면 본인이 이해력이 부족한 건지는 모르겠지만 정리해보면 이 문제에서 말하는 '영역'은 같은 색깔로(여기선 정수로 표현하므로 같은 정수) 상, 하, 좌, 우 연결되어 있다면 하나의 영역으로 간주한다는 것이다...
[프로그래머스,Level 2] 삼각 달팽이(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 처음 풀 때 무슨 규칙이 있을까 하고 찾아보았지만, 본인이 못 찾는 건지 규칙이라고는 발견할 수 없었다. 다른 분들의 풀이 또한 특별한 규칙이 있는 것이 아닌, 문제 자체에서 제시하는 조건을 이용해 푼 사람들이 많았다. - 정답풀이 이 문제는 문제에서 제시하는 것처럼 반시계 방향으로 숫자를 증가시켜주면 된다. 데이터의 저장은 2차원 배열을 왼쪽 정렬하면 표현할 수 있으며, 아래 및 오른쪽 진행은 각각 행, 열이 증가하고 대각선 좌상 향은 행, 열이 모두 감소한다는 점을 조건으로 잘 사용하면 된다. 또한 규칙을 찾으면서 발견할 수 있었던 점을 활용하였는데, n이 4일 때 반시계 방향으로 진행할 때 1~4까지 아래 방향으로 수행한 뒤, 5~7까지 오른쪽 방향으로 수행한 뒤, 8~9까지 좌상 향 ..
[프로그래머스,Level 2] 프린터(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 문제를 읽는 순간 우선순위 큐가 생각나기는 했지만, 사용해본 적이 없어서 관련된 내용을 간단하게 찾아보았다. 처음 생각으로는 문서의 위치로 주어지는 location으로 인해 우선순위 큐에 우선순위, 인덱스를 필드로 가지는 클래스를 삽입하여 Comparable 인터페이스를 이용하는 방법을 생각해 보았는데, 생각대로 정렬이 되지 않아 다른 방법을 찾아보았다. - 정답풀이 다른 분들의 풀이를 참고하여 이 문제는 우선순위 큐를 별도의 정렬을 할 필요가 없이 내림차순 정렬한 뒤, priorities 배열을 탐색하며 큐에서 나오는 값과 location이 일치하는 경우를 찾으면 되었다. 예제 2번을 기준으로 생각해보자. 1. priorities = 1, 1, 9, 1, 1, 1 6개의 대기목록이 존재한다..
[프로그래머스,Level 2] 주식가격(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 문제에서 주어지는 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 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제를 간단하게 요약해보자면, 기능을 개발을 완료하는 수치가 100일 때, 미완성된 기능의 개발 정도를 progress배열에 담아 전달해준다. 이 기능들은 진행률이 100이 되면 기능을 배포할 수 있게 된다. 이때, 각 기능을 하루에 개발할 수 있는 속도가 speeds에 담아 전달받는다. 각 기능은 이 speeds의 수치만큼 하루에 진행된다. 위의 내용을 통해 구할 수 있는 식은 각 기능을 개발 완료하는 데 걸리는 시간이다. (100 - 각 진행률) / 기능의 개발속도 를 통해 100이 되는 일 수를 구할 수 있는데 이때, 나누어 떨어지지 않는 일 수는 +1을 해주는 것을 잊으면 안 된다. 이렇게 구한 각 기능의 개발이 완료되는 일 수를 큐에 삽입한다. 큐를 사용한 이유는 앞..
[프로그래머스,Level 2] 다리를 지나는 트럭 (JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 처음에는 2차원 배열을 활용해 각 트럭이 통과한 시간을 별도로 저장해 모든 처리과정 후, 각 트럭이 다리를 건너는데 걸린 시간을 모두 더하는 방식으로 풀이하고자 하였다. 그러나 실패. 검색을 통해 대략적인 포인트를 확인하고 다시 풀어보았다. - 정답 풀이 이 문제의 핵심은 다리의 길이라고 생각된다. 입력 예제 1번의 경우 다리의 길이는 2로 총 2대의 트럭이 다리에 올라갈 수 있는데, 이 과정에서 다리가 견딜 수 있는 하중을 고려해주는 것이 포인트 같다. 또한 애초에 문제에서 원하는 답이 모든 트럭이 다리를 지나는데 걸리는 최소 시간이므로, 다리가 견딜 수 있는 하중은 모든 트럭을 견딜 수 있게 주어진다. 고려해야 하는 경우의 수는 아래와 같다. 1. 첫 번째 트럭이 올라가는 경우 => 트럭..
[프로그래머스,Level 2] 멀쩡한 사각형 (JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 그림을 보고 규칙성은 발견하기는 했지만, 이를 어떻게 이용해야 할지 몰라 검색을 통해 알아냈다. 아래 블로그에 잘 설명되어 있다. [프로그래머스] 멀쩡한 사각형 문제풀이 (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 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제를 처음 풀 때 든 생각은 skill_trees로 주어지는 문자열들의 한 글자를 기준으로 skill 문자열에서 해당 문자 이전의 모든 선행 스킬들의 방문 여부를 체크하고자 했다. 예를 들어 BACDE에서 첫 글자인 B는 1. skill 문자열에 포함되며, 2. 선행스킬인 C의 방문 여부를 체크 (여러 개면 모두 체크) 이와 같은 방식은 반복문을 3번이나 사용하고 코드 자체도 복잡해져 다른 방법을 생각해 보았다. 다시 생각해본 풀이는 선행스킬만을 생각했을 때, 한 스킬을 배우기 이전의 스킬이 배워져 있다면 모든 선행 스킬이 모두 만족한 것이기 때문에 한 스킬의 이전 선행 스킬의 방문 여부만 체크하면 될 것 같다고 생각했다. 예를 들어 CBADF에서 C는 skill 문자열의 ..
[프로그래머스,Level 2]124 나라의 숫자(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 정답 풀이 이 문제는 처음 봤을 때 어떻게 풀어야 할지 감이 잡히지 않아 검색을 통해 알아보았다. 자세한 설명은 아래 블로그를 참고 바란다. [프로그래머스] 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 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 조금만 생각해보면 간단하게 풀 수 있는 문제인 것 같다. 문제에서 제시하고 있는 조건에 따라 적절하게 처리를 해주면 된다. 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; /..