목록Programming/프로그래머스 (42)
조앤의 기술블로그
[문제 접근] 연결 리스트로 그래프를 구현한 뒤, bfs로 순회하며 간선의 개수를 센다. (최소 간선 경로 이므로 bfs) [코드] import java.util.*; class Solution { public int solution(int n, int[][] edge) { int answer = 0; //bfs ArrayList graph = new ArrayList(); Queue queue = new LinkedList(); int[] depth = new int[n+1]; Arrays.fill(depth, -1); for(int i = 0; i < n + 1; i++){ graph.add(new ArrayList()); } //무방향 그래프이므로 양쪽 다 추가 for(int i = 0; i < e..
1. 최댓값 구하기 가장 최근에 들어온 동물은 언제 들어왔는지 조회. SELECT MAX(DATETIME) AS '시간' FROM ANIMAL_INS 2. 최솟값 구하기 동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL문 SELECT MIN(DATETIME) AS '시간' FROM ANIMAL_INS 3. 동물 수 구하기 동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL문 SELECT COUNT(*) AS 'count' FROM ANIMAL_INS 4. 중복 제거하기 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL문을 작성. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 친다. SELECT COUNT(DISTINCT NAME) FROM A..
초기값 answer을 1로 해주어야 한다는 것을 주의하자. [문제접근] 옷 개수에 따라 경우의 수를 구해야 한다. -> 옷 종류에 따른 개수에 따라 hash map을 구성한다. 경우의 수를 구하는 공식을 구한다. - 각 종류의 옷에 안입는 선택지를 하나 추가 (옷 개수 + 1) - 하나도 안입는 선택지는 없으므로 전체에서 -1 따라서 공식은 (n+1) * (m+1) *... -1 [코드] import java.util.*; class Solution { public int solution(String[][] clothes) { int answer = 1; Map closet = new HashMap(); int val = 0; for(String[] clo : clothes){ if(closet.get(..
해시를 사용하는 방법을 익히기 위해 다른 사람의 코드를 참고하였다. 예제 3번의 조건을 유의해야 했다. (참여자 명단에 두명이 있는 경우) 해시를 사용하면 시간복잡도가 O(n)이 된다. [코드] import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; int val = 0; Map hm = new HashMap(); for(String part : participant){ if(hm.get(part) == null) hm.put(part, 1); else{ val = hm.get(part) + 1; hm.put(part, val); } } ..
[1차 코드 - 실패] import java.util.*; class Solution { static class Node { int index; int value; public Node(int index, int value){ this.index = index; this.value = value; } } public int solution(int[] priorities, int location) { int answer = 0; Queue pq = new LinkedList(); int[] printing = new int[priorities.length]; for(int i = 0; i < priorities.length; i++){ pq.add(new Node(i, priorities[i])); } i..
[문제] [문제접근] [코드] class Solution { public int solution(String skill, String[] skill_trees) { int answer = 0; boolean[] visit = new boolean[skill.length()]; for(int i = 0; i < skill_trees.length; i++){ String mySkill = skill_trees[i]; int skillIndex = 0; boolean flag = true; for(int j = 0; j < mySkill.length(); j++){ for(int k = 0; k < skill.length(); k++){ if(skill.charAt(k) == mySkill.charAt(j))..
[문제] [문제접근] 어렵게만 생각했는데 2개 단위로 압축 , 3개단위로 압축단위가 분리(?) 되어있는 것이었다!!! 문제를 끝까지 꼼꼼히 잘읽자! for(int i = 1; i 1) result += count + target; else result += target; count = 1; target = current; } } if(count > 1) result += count + target; else result += target; int length = result.length(); if(answer > length) answer = length; } if(answer == 987654321) answer = 1; return answer; } } [참고] https://keepgoing0328..
[문제] 문제 설명 카카오 프렌즈 컬러링북 출판사의 편집자인 어피치는 네오에게 컬러링북에 들어갈 원화를 그려달라고 부탁하여 여러 장의 그림을 받았다. 여러 장의 그림을 난이도 순으로 컬러링북에 넣고 싶었던 어피치는 영역이 많으면 색칠하기가 까다로워 어려워진다는 사실을 발견하고 그림의 난이도를 영역의 수로 정의하였다. (영역이란 상하좌우로 연결된 같은 색상의 공간을 의미한다.) 그림에 몇 개의 영역이 있는지와 가장 큰 영역의 넓이는 얼마인지 계산하는 프로그램을 작성해보자. 위의 그림은 총 12개 영역으로 이루어져 있으며, 가장 넓은 영역은 어피치의 얼굴면으로 넓이는 120이다. 입력 형식 입력은 그림의 크기를 나타내는 m과 n, 그리고 그림을 나타내는 m × n 크기의 2차원 배열 picture로 주어진다..