본문 바로가기

Archived(CSE Programming)/알고리즘(Java)

(17)
프로그래머스 - 이중우선순위 큐(Java, LV3) https://programmers.co.kr/learn/courses/30/lessons/42628?language=java 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 풀이 우선순위큐(heap)을 오름차순, 내림차순(Collections.reverseOrder()) 기준으로 하나씩 만든다 삽입의 경우 두 heap에 각각 넣어준다 최대값 삭제의 경우 내림차순 우선순위큐에서 최대값을 찾아서 두 heap에 remove 한다 최소값 삭제의 경우 오름차순 우선순위큐에서 최솟값을 찾아서 두 heap에 remove 한다 결과값을 출력하는데 heap이 empty가 아닐 경우에만 값을 넣어 출력한다 import java.util.*; class Solution { public int[] solu..
프로그래머스 - 디스크 컨트롤러(Java, LV3) / Heap https://programmers.co.kr/learn/courses/30/lessons/42627?language=java 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 풀이 Job 들에 대해서 시간이 빠른순으로 정렬(같을 경우 짧은 시간 순) Job 들을 작업시간이 짧은 순으로 우선순위 큐에 보관한다 현재 시간(t) 기준으로 작업수행이 가능한 Job들을 우선순위 큐에 넣고 반복문을 통해서 하나씩 꺼내서 수행한다 수행한 뒤 다시 현재 시간을 경과된 작업시간만큼 더해주고 다시 작업수행이 가능한 Job..
프로그래머스 - 카카오프렌즈 컬러링북(Java, 2017카카오) https://programmers.co.kr/learn/courses/30/lessons/1829?language=java 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 풀이 전체 그래프에서 탐색할 영역 중 영역 0(배경색)을 제외한다 그래프 중 방문하지 않은 곳을 찾아서 그곳을 시작점으로 같은 색으로만 DFS 탐색을 한다. DFS 탐색을 하면서 영역의 수를 count하고, count한 영역이 최대영역 크기보다 크면 갱신한다. DFS 가 끝나면 전체 그래프 중에서 다시 탐색하지 않은 곳을 찾아서 DFS 탐색..
프로그래머스 - 문자열 압축(Java, 2020 카카오) https://programmers.co.kr/learn/courses/30/lessons/60057# 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr 풀이 전체 문자열 길이가 1000 밖에 안되기에 O(N^2)로 풀어도 상관없음 주어진 조건을 따라서 구현하기 문자열을 길이 기준(i)을 1
프로그래머스 - 삼각 달팽이(Java, LV2) https://programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 풀이 쉬운 문제처럼 보였으나 규칙성을 찾는데 생각보다 오래걸렸다... 수학 규칙을 추론하고 검증하는데 조금 무뎌진거 같은 느낌이었다. 기본적으로 전체 큰 삼각형의 특성을 살펴보면 된다. 왼쪽아래 대각선으로 내려오거나(Down) 오른쪽으로 지나가거나(Side) 왼쪽위 대각선으로 올라가거나(Up) 세 가지 중 하나이다. 그리고 각 방향의 길이는 n, n-1, n-2, ....
프로그래머스 - 스킬트리(Java, LV2) https://programmers.co.kr/learn/courses/30/lessons/49993?language=java 코딩테스트 연습 - 스킬트리 programmers.co.kr 풀이 주어진 skill_tree String 배열에 대해서 주어진 skill String 만큼 반복문을 돌면서 탐색한다. skill 순서에 따라 검사하는데 선행스킬과 후행스킬의 순서를 고려한다. 1) 선행 스킬을 배우지 않고 후행 스킬을 배운 경우 -> 비정상 2) 선행 스킬을 후행 스킬 뒤에 배운 경우 -> 비정상 class Solution { public int solution(String skill, String[] skill_trees) { int answer = 0; // skil의 값들을 skill_tree에..
프로그래머스 - 124 나라의 숫자(Java, LV2) https://programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr풀이10 진수124 진수10 진수124 진수11124422131113414112411151145121612161417122721181248221914192420142104121144114222211 쉬운 듯 어려운 듯, 너무 어렵게 풀어서 결국 쉬운 풀이를 찾아봤다.풀이의 핵심은 3진법을 생각하는데 조금 차이를 이해하는 것이다. 기본적인 3진법: 0, 1, 2, 10, 11, 12 , 20, 21, 22124의 나라 3진법: 1, 2, 4, 11, 12, 14, 21, 22, 24, 41, 42, 44 차이점이 보인다. 바로 자리숫자에..
프로그래머스 - 경주로 건설(Java, LV3, 2020 카카오) https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 틀린 풀이 처음에 생각했던 풀이는 다음과 같다(틀린풀이 주의) BFS로 최단 경로 탐색..