본문 바로가기

Algorithm85

[Java] 프로그래머스 -길 찾기 게임 https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 못 푼 이유 Node를 만들어 compareTo override로 정렬 기준까지는 잘만들었지만 별생각없이 TreeSet에 집어넣어서 풀려고 했고, 결과적으로 TreeSet자료구조로는 DFS를 구현할 수 없었다. 위를 깨닫고 다음번엔 Node배열을 만들어 부모-자식 간 y값의 규칙을 통해 순회하려고 했으나, 규칙을 잘못파악해 성공하지 못했다. 그 후 검색을 통해 만든 Node들을 연결하는 코드를 발.. 2023. 11. 9.
[Java] 프로그래머스 - N개의 최소공배수 내 코드 import java.util.*; class Solution { public int solution(int[] arr) { Arrays.sort(arr); int max = arr[arr.length-1]; int gcd=1; while(!isCoprime(arr, max)){ Arrays.sort(arr); max= arr[arr.length-1]; for(int i=2; i 2) { for(int i = 2; i < arr.length; i++) { g = gcd(answer, arr[i]); answer = (answer * arr[i]) / g; } } return answer; } //최대 공약수 private static int gcd(int a, int b) { int r = a .. 2023. 11. 6.
[Java] 프로그래머스 - 최솟값 만들기 초기 코드 import java.util.*; class Solution { private int answer=Integer.MAX_VALUE; private int[] A; private int[] B; //사용된 인덱스를 저장 private List usedA = new ArrayList(); private List usedB = new ArrayList(); public int solution(int[] _A, int[] _B) { A = _A; B = _B; dfs(1, A.length, 0); return answer; } private void dfs(int currentDepth, int maxDepth, int sum){ if(currentDepth>maxDepth){ answer = Ma.. 2023. 11. 4.
[Java] 프로그래머스 - 삼각 달팽이 https://school.programmers.co.kr/learn/courses/30/lessons/68645 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답 코드 class Solution { int[][] tri; public int[] solution(int n) { tri = new int[n][n]; int[] answer = new int[n*(n+1)/2]; int y = -1; int x = 0; int cnt = 1; for(int i=0; i 2023. 11. 4.
[Java] 프로그래머스 - 쿼드압축 후 개수 세기(lv.2) 기존 코드 import java.util.*; class Solution { private int zeroCnt; private int oneCnt; private int[][] sqr; public int[] solution(int[][] arr) { sqr = arr; dnq(0, sqr.length, 0, sqr.length); return new int[]{zeroCnt, oneCnt}; } private void dnq(int rs, int re, int cs, int ce){ //열의 시작 좌표와 끝 좌표, 행의 시작 좌표와 끝 좌표를 뺀값이 1보다 작거나 같을 때 종료 //근데 size로 계산하는게 더 간편하고 단순해보임 if(re-rs 2023. 11. 1.
[Java] 프로그래머스 - 두 큐 합 같게 만들기(lv.2) 못푼 이유 큐를 만들어 사용할까 고민하다 주어진 배열을 그대로 사용해 풀기로 함. 하지만 배열 카피 지옥에 빠졌고 수많은 예외처리가 발생해 구현에 실패했다. 아래 핵심로직을 파악 못하고 첫번째 큐에서 pop하는 경우, 두번째 큐에서 pop하는 경우를 이진트리를 구현해 푸려고 했다. 물론 구현했다면 풀렸을테지만, 아래 로직을 파악하고 반복문으로 푸는게 더 효율적이고 구현 난이도도 낮다. 핵심 로직 각 큐의 합이 큰 쪽을 pop(poll), 작은 쪽에 insert(offer) 요소의 이동 횟수가 큐의 길이 * 3 보다 커질경우 합이 같아 질 수 없는 것으로 간주, -1을 리턴 소스 코드 import java.util.*; import java.util.stream.*; class Solution { publ.. 2023. 10. 20.
[Java] 백준 15683 - 감시 https://www.acmicpc.net/problem/15683 1~5번 cctv의 모든 각도의 경우의 수를 구해야 하는 문제이었고, DFS로 풀었다. 삼성 문제답게 구현이 너무나 힘들었지만 1시간 반정도 걸려서 정답을 낼 수 있었다. 뭐랄까 구현 난이도가 그렇게 까지 높진 않지만 할게 많다는 느낌? 실전에서도 충분히 나올 수 있는 유형인 만큼 익숙해지면 좋다고 생각한다. 시나리오 2차원 배열로 \(N * M \)그리드 입력받기. 최초 1회 그리드 탐색해서 CCTV의 개수와 좌표 파악. 구해놓은 좌표 list를 순차적으로 돌며 각 요소에 해당하는 cctv의 모든 각도를 구한다. 3의 과정을 dfs함수내에서 수행하며, 하나의 cctv에 대해 \(0^\circ, 90^\circ, 180^\circ, 27.. 2023. 6. 19.
[Java] 프로그래머스 - 호텔 대실 https://school.programmers.co.kr/learn/courses/30/lessons/155651 내 코드 import java.util.*; class Solution { private int answer = 1; public int solution(String[][] book_time) { //0 int[][] int_book_time = convertStringArrToIntArr(book_time); //1 sortByCheckout(int_book_time); //2. 현재 사용중인 방 배열 추가해서 초기값으로 첫번째 요소 삽입 & answer++; List occupied = new ArrayList(); occupied.add(int_book_time[0][1]); //3 .. 2023. 5. 3.
[Java] 백준 7662 - 이중 우선순위 큐 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 처음에는 PriorityQueue를 이용해서 min-heap, max-heap을 구현하는 방법으로 문제를 풀려고 했지만 구현하는게 쉽지 않아 결국 정답을 본 문제이다. 정답 코드 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(ne.. 2023. 5. 3.