일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 누적합
- JavaScript
- const
- 컴퓨터비전
- dp
- 프로그래머스
- 삼성SW역량테스트
- Lv3
- 코틀린
- 백준
- 자바스크립트
- js
- 2018 KAKAO BLIND RECRUITMENT
- lv2
- 2021 KAKAO BLIND RECRUITMENT
- BFS
- 2023 KAKAO BLIND RECRUITMENT
- 유니온파인드
- level3
- 호이스팅
- 구현
- kotlin
- java
- level2
- 2022 KAKAO BLIND RECRUITMENT
- 자바
- 동적계획법
- VAR
- 컴퓨터 비전
- 브루트포스
- Today
- Total
목록프로그래머스 (15)
코드를 느껴바라
문제 링크성공 여부(걸린 시간): 성공(20분)아이디어DP 기본 개념문제인듯 하다.우측 또는 아래로 밖에 이동을 못하고 웅덩이로는 갈 수가 없다.map에 웅덩이를 -1로 표시해주고dp배열을 따로 만들어서 진행해주었다.점화식은 이렇다dp[i][j] = (map[i-1][j]!=-1?dp[i-1][j]:0) + (map[i][j-1]!=-1?dp[i][j-1]:0)위에서 저장된 dp값과 왼쪽에서 저장된 dp값즉 해당 칸에 도달하기 이전 칸까지 갈 수 있는 경우의 수를 웅덩이가 아니라면 합해준다.그럼 끝.풀이 코드import java.util.*;class Solution { public int solution(int m, int n, int[][] puddles) { int answer =..

문제 링크성공 여부 (걸린 시간): 성공(28분 45초)아이디어사실 거의 크루스칼 알고리즘 개념 문제이다.그러나 처음엔 제출했을때 부분점수를 받았는데 이유는 처음 아이디어를 설명하고 나서 하겠다. 우선순위큐에 각 엣지들을 넣어서 작은 순서대로 엣지를 뽑으며 연결해줌단 사이클을 발생 시키는 엣지는 제외해야함사이클이 어떻게 발생하는 지는 hashSet에 이미 연결된 노드의 번호를 저장해두었기에만약 엣지의 양 노드가 모두 이미 저장되어 있다면 사이클로 간주하고 continue했음 -> 이 부분이 문제였다.아니라면 노드 추가해주고 answer+= 엣지 가중치 왜 문제가 생기느냐면 만약 이러한 경우가 있을때2와 3은 이미 set에 등록되어 있기에 2-3을 연결하는 엣지는 사이클이 아님에도 걸러지게 된다.그래서 이..
문제 링크성공 여부(걸린 시간): 실패(56분 5초)아이디어일단 처음에 생각한 순서는 이러했다.1. 소문자로 바꾼 헤드 기준으로 사전순 정렬2. head가 같으면 number 작은 순으로 stable하게 정렬3. 넘버도 같으면 들어온 순서 그대로4. 마지막에 도출된 순서대로 원본 파일명을 순서대로 넣어주고 return 일단 이렇게 하기 위해서 어떻게 문자열을 저장할건지가 관건이었다. 난 HashMap으로 소문자인 헤드가 key, 원본 head, 원본 number부분과 원본 tail을 나누어 저장하고추가로 int로 바꾼 nuber도 같이 저장해줄 (우선순위큐에 넣을때 int로 바꾼 number기준으로 정렬하기 위함)node로 저장한 우선순위큐를 value로 저장했다. 정렬기준은 처음에는 number 오름..
문제 링크성공 여부(걸린 시간): ❌(20분)아이디어처음에는 순서를 전부 브루트포스로 조합하면 최대 17개의 노드를 0을 제외하고 모든 순서대로 조합했을때는 16! 이다. 사실 16!은 엣지를 생각치 않고 진짜 전부 돌려본 경우고만약 실제 노드 연결을 고려해서 노드 방문 순서를 작성하면 결국 연산수는 동일하지 싶다. (이진트리이기 때문에) 그당시엔 그렇게 생각을 못했고 생각한건 DFS로 해야한다는 것이었는데 방문한 노드들의 자식노드로 이동할때해당 노드의 다른 자식 노드도 다음 이동할 방문 리스트로 추가해야 했다. 그런데 도저히 방법이 떠오르지 않았고 그렇게 LV2라고 생각하고 있어서 20분이 지나자실패처리하고 힌트를 보았다... (알고보니 레벨 3 였음ㅎㅎ) 😅여기서 힌트를 보고 바로 풀어보았다. [P..
문제 링크성공 여부: 실패(부분점수 40점)아이디어처음에 경우의 수를 계산하는데 2^40을 16000이네~ 하고 넘어가서 그냥 DFS로 풀었다...그 결과 시간초과가 발생하여 40점으로 마감했는데다시해보니 DP라는 생각이 들어 배낭문제인가? 싶었으나 도저히 떠오르지 않아 찾아보았다.아래는 40점짜리 완탐 코드이다.//실패코드import java.util.*;class Solution { static class Node{ int a, b; public Node(int a, int b){ this.a = a; this.b = b; } } static PriorityQueue pq; static int [][] ..
문제 링크성공 여부(걸린 시간): 성공(1시간 34분 17초)아이디어우선 문제를 읽으면서 부르트포스라고 확신을 했다.이유는 우선 주사위의 각 면에 어떤 숫자가 있는지는 주어진다.(6면체임)그리고 n이 최대 10이라 최대 경우의 수는 6^5 X 6^5 = 약 6000만이므로 시간은 충분하다고 가정했다.(보통 10초임)그래도 구현은 꽤나 복잡했는데 복잡할 수록 미리 설계를 하고 코드를 짜는것이 좋다고 생각해서 설계를 열심히 해보았다.시작) 일단 순서는 주사위 분배 String타입(예: n==4일때 1,4 주사위면 "14"이런식) 그리고 점수 빈도 계산A, B가 들고갈 주사위 조합을 dicePermutation에서 ArrayList로 전달한다. 만들어진 조합을 저장하기 전에 그에 해당하는주사위 조합으로 만들 ..
문제링크성공 여부(걸린 시간): 성공(32분 47초)아이디어일단 문제에서 중요한 키포인트는 한 차량이 들어가고 나가는것이 여러번이 될 수 있다는 것이고그때마다 정산하는 것이 아닌 일괄적으로 23:59에 정산한다고 생각을 하고 문제를 풀어야한다.순서대로 설명해보겠다. 출입차처리그래서 나는 한 차량에 대한 누적시간을 저장해줄 HashMap하나 그리고 최근 들어온 시간을 기록해줄 HashMap하나총 2개의 HashMap을 생성했고 이 2개에 저장된 정보를 바탕으로 마지막에 일괄계산 해주었다. 우선 전체적으로 보면 records의 차량 기록을 하나씩 돌면서 출차, 입차 처리를 수행해 주었다. ⭕입차는 lastCome 맵에 최근 들어온 입차처리만 해주면 끝이고 ❌출차는 해당 차에 대한 sumTime기록이 있다면 ..
문제 링크아이디어1. 내가 생각한 아이디어는 8개의 캐릭터를 8!로 일렬로 나열한다. -> 백트레킹으로 조합하여 ArrayList에 저장2. 길이가 8이 되었을때 순서대로 나열한 ArrayList에서 indexOf로 index를 받아와 조건에 있는 두 캐릭터의 index차이를 구해서조건에 부합하는지 operand에 맞게 검사해주고 만약 조건에 안맞으면 그냥 return3. 부합하는 경우에는 static result에 +1씩해준다.4. 마지막에 출력해주면 끝.정답 코드import java.util.*;class Solution { static int result; static char [] name; static String [] datas; public int solution(int..
문제 링크성공 여부(걸린 시간): 성공(36분6초)아이디어처음에 이 문제를 보고 엥 이게 Lv2라고 1아닌가 생각할 정도로 간단하게 구현해서 제출했는데 60점이 나왔다.내가 놓친 부분이 있었다. 그건바로 문제에서 LRU방식으로 구현하라 했는데난 miss가 났을때 큐가 가득차있다면 제일 앞에 있는 city를 빼고 있었던 것이었다.LRU(Least Recently Used) 이름 그대로 최근에 최소로 사용된이라는 뜻인데 운영체제 배울때 배운 스케줄링 기법이었다.만약 내가 이걸 모르는 상태로 풀었다면 문제 테스트케이스에도 나처럼 간단하게 풀어도 걸리지 않기에그냥 넘어갔을 것이고 시험때는 점수도 모르니 틀린지도 모르고 넘어갔을 생각을 하니 아찔했다. 각설하고 이제 어떻게 풀었는지 설명을 해보겠다.우선 난 캐시를..

문제 링크성공 여부(걸린 시간): 성공(27분18초)아이디어문제를 읽다보니 주어지는 문자열의 길이도 짧아서 시간도 넉넉하고 단순 구현문제라고 생각했다.전체코드의 전반적인 순서는 이러하다.map 생성-> (탐색 -> 삭제 -> 블럭 떨어뜨리기) 새로 탐색되는 2 * 2블럭이 없을 때까지 반복-> 삭제처리된 블럭 개수 세고 return여기서 반복문을 dowhile문을 써서 우선 한번 돈 다음 그 결과로 조건을 검사하고 싶었지만아쉽게도 do while문의 문법이 기억이 안나서 내 방식대로 풀었다. (탐색 -> 삭제 -> 블럭 떨어뜨리기) 반복문이 사실 이 문제풀이의 핵심 로직인데여기서 주의할 점은 2 * 2 블럭을 찾더라도 그 즉시 삭제하면 안된다.내가 탐색-> 삭제 순서로 구분해둔 이유인데 아래의 그림을 보..