일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 컴퓨터 비전
- 구현
- BFS
- 호이스팅
- 삼성SW역량테스트
- 유니온파인드
- JavaScript
- Lv3
- 동적계획법
- const
- 2021 KAKAO BLIND RECRUITMENT
- 2023 KAKAO BLIND RECRUITMENT
- kotlin
- 브루트포스
- 컴퓨터비전
- 자바
- 코틀린
- 프로그래머스
- dp
- lv2
- 자바스크립트
- VAR
- 2018 KAKAO BLIND RECRUITMENT
- 2022 KAKAO BLIND RECRUITMENT
- level3
- java
- level2
- js
- 누적합
- Today
- Total
목록PS/프로그래머스(Programmers) (23)
코드를 느껴바라
문제 링크성공 여부(걸린 시간): 성공(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 블럭을 찾더라도 그 즉시 삭제하면 안된다.내가 탐색-> 삭제 순서로 구분해둔 이유인데 아래의 그림을 보..
문제 링크성공 여부(걸린 시간): 성공 (45분)아이디어처음에 문제를 제대로 읽지 않고 풀다가 놓친점들을 좀 강조해서 설명을 해보자면문제의 조건대소문자 달라도 같은 알파벳이라면 같은 것으로 취급다중집합도 가능해야함집합 둘 다 공집합이라면 유사도는 1이다.사실 이 두개를 염두하지 않고 코드를 짠 것이 20분을 잡아먹었다.크게 로직은 이러하다.ArrayList은 총 3개로 이루어진다.str1의 2개씩 잘린 알파벳만을 포함하는 문자열의 집합str2의 2개씩 잘린 알파벳만을 포함하는 문자열의 집합그 둘을 모두 가지는 합집합그런다음 A나 B를 기준으로 순회하며 다른 집합에 존재하는 교집합을 세어주고 상대 집합에서 해당 원소를 빼준다.나는 A를 기준으로 했음그렇게 교집합의 수를 구했다면자카드 유사도를 구해주면 되는..
문제링크-> 표 병합성공 여부(걸린 시간): 성공(2일)아이디어처음에 문제를 풀때는 매우 순조로웠다. 각 기능인 update(2가지), merge, unmerge, print 총 5개의 함수를 구현하여전체 명령문을 인자 반복문을 통해 수행해주며 마지막에 결과를 출력해주고자 했다. 함수별로 정리를 해볼 것인데 그전에 union-find를 통해 merge와 unmerge를 구현해주어야 다른 함수들도 제대로 동작할 수 있기에 union-Find 코드부터 작성을 해주었었다.static int find(int x, int y){ if(parent[x][y]==x*50+y){ return x*50+y; } table[x][y] = null; re..
보행자 천국 링크성공 여부(걸린 시간): 성공(48분 13초)아이디어처음 생각한 아이디어는 0,0이 아니고 표지판이 없는 지점 기준으로 이전 지점의 상태를 기준으로 dp를 수행해주면 되겠다는 생각이었다.그런데 왜 표지판이 없는 지점만 dp를 통해 값을 저장해주느냐?-> 회전표지판에 값을 저장해버리면 그게 위에서 온값인지 옆에서 온 값인지 알지 못하게 되어버린다.그래서 난 표지판은 dp에서 0값을 가지게 했다. 계속해서 설명해보자면점화식은 경우에 따라 매우 많은 차이점을 가진다.일단 0,0인 경우를 초기화해주고 0,0을 제외한 지점들을크게 3가지의 경우로 나누어 주었다.가장 윗줄 (우측 또는 아래로만 이동가능 -> 이전 지점을 기준으로 수행하므로 왼쪽만 보면됨)가장 왼쪽줄(아래또는 우측으로 이동가능 -> ..
문제링크문제 설명처음에 동기들과 모의코테를 치면서 이 문제를 풀게 되었었는데 이 문제를 풀때는 와 이게 뭐지? BFS or DFS로 풀었을때 시간이 말도 안되게 나오는 것을 미리 계산해보니 도저히 엄두가 안났었다.DP로 풀어야 하는것은 알겠는데 아무래도 생각이 나질 않는 것이였다. 그 당시에 머리가 하얘지면서 한숨만 나왔었다. 그래서 나중에 이 문제를 다른사람들은 어떻게 풀었는지에 대해서 꼭 알아보고자 했고 그다음날인 오늘 바로 찾아보았는데... 아니라 다를까 DP였다. 생각을 조금만 더해보면 풀어볼 수도 있었겠다는 생각이 들었다.물론 그 상황에서 점화식을 빠르게 떠올리는 것이 관건이고 실력이지만 아무튼 아쉬운... 😭(사실 DP특성상 코드로 구현은 쉽지만 점화식를 구상하는게 8할이라고 생각함) 각설하..
문제 설명 -> 프로그래머스 압축 이동아이디어사실 이 문제는 LZW에 대한 어느정도 이해도가 있으면 Lv.2지만 없다면 3 그이상이라고 생각된다.난 작년에 알고리즘 시간에 배웠던게 어느정도 기억이 나서 기억을 더듬으며 문제에서 주어진 순서대로 구현만 해주면 되었는데 그게 아니였다면 아마 못풀었을 것이라고 장담한다.ㅎㅎ 우선 LZW의 동작순서에 대해서 이해가 완료되었다면 나의 구현방식에 대해서 설명해보겠다. 처음의 길이가 1인 A~Z와 추후에 새로 생길 단어에 대한 사전을 저장해줄 ArrayList를 만들어주었다. 압축을 하기위해선 그 단어와 그의 순번을 저장하는데 ArrayList에 순서대로 넣기에 indexOf한 값의 +1을 하면 압축된 문자에 대한 수가 나오게 된다. 그런데 나중에 불러올때 어떻게 검..