알고리즘
프로그래머스_디스크컨트롤러
프로그래머스_디스크컨트롤러
2021.08.13
프로그래머스_실패율
프로그래머스_실패율
2021.08.13
새로운게임_Java
새로운게임_Java
2021.08.04문제 접근 하기 위해 아래 2가지를 만들어주었다. 1. 말의 상태를 관리하는 class를 생성 => 체스의 상태를 관리해줘야 하는 이유는 체스가 움직이면 맨 밑에 있는지 위치는 어디인지 방향은 어디인지를 명확하게 알기 위함이다. 2. 맵, ArrayList 맵 => 맵은 0,1,2 이렇게 표시만 되는 부분이고 ArrayList 맵은 어떤 체스들이 들어 있는지 보여준다. 예를 들면 다음과 같다. ArrayList_Map[0][0] = { 1,2,3 } 의 의미는 (0,0) 좌표에 체스 1,2,3 이 포진해 있다. 이렇게 해석하면 된다. 3. 우선 main으로 쭉 나열해서 푸는 방법 그리고 재귀적으로 푸는 방법 2가지 모두 시도해보았다. 아무래도 main에다 다 때려박아서 하는게 속도는 더 좋았다. 그치만 ..
LeetCode : Partition Label
LeetCode : Partition Label
2021.07.07https://leetcode.com/problems/partition-labels/submissions/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 class Solution { public List partitionLabels(String s) { //last Index 넣어라 HashMap hm = new HashMap(); String[] splitMsg = s.split(""); for(int i=0; i
KAKAO_[3차]압축
KAKAO_[3차]압축
2021.07.071 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 import java.util.*; class Solution { public int[] solution(String msg) { int[] answer = {}; HashMap hm = new HashMap(); HashMap checkSearch = new HashMap(); String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",..
Kakao_보석쇼핑
Kakao_보석쇼핑
2021.06.10시작 효율성을 검증하는 문제다. 사실 문제 요구사항은 크게 어렵지 않다. 다만, 보석의 개수가 100,000 이라는 점에서 반복문을 2번만 돌려도 시간초과가 날 수 있으니 유의해야 한다. 배열의 범위가 커지면 O(N)이나 혹은 그 이하로 프로그램이 수행해야 하는 경우가 종종 있다. 이 문제를 접근해서 해결할 수 있는 방법은 투포인트 방법이 있다. 여기서는 원포인트, 투포인트 접근 모두 다뤄보고자 한다. 알고리즘 동작 원리(투포인트) 쉽게 말하면 보석을 조금씩 덜어내고 마침내 사라지면 마지막으로 보석을 본 시점부터 끝까지 돌며 해당 보석을 찾아가는 과정을 나열한 것이다. 조금 복잡해 보이지만, 별거 없다! 눈여겨 봐야할 것은 1. 중복제거해서 쥬얼리 종류 파악 2. HashMap에 각 쥬얼리가 얼만큼 등장..
BOJ_14864_줄서기
BOJ_14864_줄서기
2021.05.30시작 줄서기 문제는 Ad-hoc 으로 문제 분류가 되어있습니다. 이 알고리즘을 찾아보니, 창의력 문제 정도로 찾아볼 수 있었습니다. 규칙? 문제를 읽고 손으로 끄적이다가 대강 넣어보니 이렇게 들어가는 구나 이해를 했습니다. 아래는 그 손으로 끄적인것을 그림으로 도식화 한것입니다. 근데 막상 규칙을 찾아보려 하니 규칙이 눈에 띄진 않았지만 괄호안에서 왼쪽, 오른쪽 사이에는 대소 비교관계가 있고 왼쪽이 오른쪽보다 크기 때문에 묶어 생각해보면 학생1이 가진 숫자는 최소 2개의 숫자보다 크게 됩니다. 그렇기 때문에 +2 라는 표시를 했고 학생5의 경우에는 최소 3개의 숫자보다 작게 됩니다. 마찬가지로 -3라는 표시를 했습니다. 그렇게 보니, 초기 값 N=5라면 Array 각 인덱스에 1,2,3,4,5 가 순서대..
BOJ 5719 거의 최단 경로
BOJ 5719 거의 최단 경로
2021.05.27시작 https://lotuslee.tistory.com/137 본문을 참고하였습니다. 문제를 읽어보면 한가지 좋은 아이디어를 생각해볼 수 있었는데 구현이 쉽지 않았습니다. 아이디어는 비교적 간단합니다. 1. 다익스트라로 최단 경로를 구합니다. 2. 최단 경로들을 모두 제외 합니다. 3. 다익스트라로 다음 최단 경로를 구합니다. 그림으로 보면 다음과 같습니다. 각 순서는 그림에서 왼쪽부터 1, 2, 3으로 확인해 볼 수 있습니다. 소스코드를 우선 살펴보겠습니다. 코드 중에 preNodeCollections, ArrayList 를 선언해 두었습니다. 최소 비용을 가진 경로를 담아두기 위한 목적인데, 거리 값이 갱신 되면 왼쪽에 보이는 1번 경로가 clear 되고 2번 경로가 preNodeCollection..
다익스트라 X BOJ_4485_녹색옷입은애가 젤다지?
다익스트라 X BOJ_4485_녹색옷입은애가 젤다지?
2021.05.26시작 다익스트라 개념에 대해 정리한것을 포스팅 합니다. 다익스트라는 기본적으로 최단 경로로 많이들 알고 있지만, 최단 경로는 BFS 로도 접근할 수 있기 때문에 여기서 최소 비용 개념을 추가해주어야 합니다. 즉, 다이스트라는 최단 거리 + 최소 비용의 문제입니다. 조건 보통의 다익스트라의 문제 경우 아래 조건들을 만족합니다. 1. 방향 그래프 입니다. 2. 0 이상의 가중치 값을 가지고 있습니다 3. 사이클이 존재하지 않아야 합니다. 구현 (코드X) 다익스트라의 경우 BFS 개념에 그리디 알고리즘을 적용합니다. 덧붙이면, 최단 거리를 구하게 되지만 매 순간 가장 좋은 가중치 값을 선택하게 됩니다. 거리, 방문 여부 변수를 두어 다익스트라 알고리즘이 어떻게 동작하는지 살펴보겠습니다. 그림 처음 워크플로우는..
BOJ 17612 쇼핑몰
BOJ 17612 쇼핑몰
2021.05.25개요 이 문제는 우선순위 큐를 사용하는 문제지만, 정렬 방법에 대해 이해하고 있어야 하고 무엇보다 문제에서 주어진 요구사항을 동적으로 처리하는것보다 사전에 전처리하여 값을 모두 저장 한뒤 문제 요구사항에 맞게 풀어야 했었습니다. 처음에는 while 문으로 계속 돌면서 입력 받는대로 동적으로 값을 처리 해주었습니다. 결과적으로 꼬였습니다. 그래서, k개 즉 카운터라고 볼 수 있는 k개에 쇼핑 카트를 모두 대기하는 값을 pq에 담게 되었습니다. 그림 그림을 보게 되면 어쨋든, 상품들이 1초에 하나씩 계산이 될텐데 더 적은 상품에 대해서 카운터에 배정되게 됩니다. 상품의 개수가 같다면 카운트가 더 적은 애한테 우선 할당하게 되는데 그게 인입하는 과정에서 수행하게 됩니다. 반대로, 나갈때도 마찬가지로 기본적인 ..
프로그래머스 튜플(Java)
프로그래머스 튜플(Java)
2021.05.24소개 이 문제는 2019 카카오 개발자 겨울 인턴십으로 출제되었던 문제이다. 해당 문제에 대한 아이디어는 다음과 같다. 로직 1) 연속된 숫자를 추출하여야 한다. 2) 1의 목적을 위해서 자료구조 HashMap을 사용하였다. 3) HashMap의 경우 같은 Key라면 (default :1) +1 씩 더해주었다. 4) 결과적으로 Value (HashMap의 Key에 따른 Value) 로 내림차순하여 순서대로 Key값을 출력해 주었다. 구체화 해보면 다음과 같다. 이를 그림으로 도식화 하면 다음과 같다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40..
BOJ_1781_컵라면
BOJ_1781_컵라면
2021.05.23시작하면서 해당 문제는 pq 외에도 그리디한 방법으로 해결해 볼 수 있는데, 포스팅에서는 pq로 푸는 방법에 대해 고민해봤습니다. 여러 알고리즘 로직을 세워서 문제를 접근했는데, 9%에서 "틀렸습니다." 가 나와서 참으로 힘들게 했던 문제입니다. 문제 접근 시 데드라인과 컵라면 수를 잘 고려해봐야 하는데 데드라인은 우선순위를 높게, 같다면 컵라면 수는 더 큰것을 정해서 큐에 담아주어야 합니다. 처음 생각한 점 우선순위 큐를 지정했을 때 정렬 순서를 1. 데드라인은 우선순위를 높게 2. 컵라면 수는 더 큰것을 지정 3. 우선순위 큐에 Max-heap 구성 (데드라인 기준으로 push 할 경우 더 높은 숫자의 데드라인이 pop되는 것을 고려) ex) pq에 {1,7} 이 있다고 고려 하면, 새롭게 {2,6}..