일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lv2
- const
- JavaScript
- 브루트포스
- VAR
- 유니온파인드
- 2018 KAKAO BLIND RECRUITMENT
- 삼성SW역량테스트
- 구현
- 2022 KAKAO BLIND RECRUITMENT
- 2023 KAKAO BLIND RECRUITMENT
- kotlin
- 컴퓨터비전
- 백준
- 2021 KAKAO BLIND RECRUITMENT
- 코틀린
- 컴퓨터 비전
- dp
- level2
- BFS
- level3
- 호이스팅
- js
- 누적합
- 프로그래머스
- 동적계획법
- 자바스크립트
- Lv3
- java
- 자바
- Today
- Total
목록java (23)
코드를 느껴바라

문제 링크성공 여부(걸린 시간): 성공(2시간 22분 40초)아이디어크게 함수는 turn(돌리기), gainFirst(탐색), gainSecond(채우고 돌리고 반복) 3개로 나눠서 생각했다.1단계중심축이 될 후보는 9개각 9개에서 3개의 각도로 돌릴수 있음총 27개의 돌리고 나서의유적지의 중심돌린 각도(t가 1이면 90 2면 180 3이면 270)돌렸을때의 유물 1차 획득 가치돌리고 나서의 map(유물이 출토된 부분은 0으로 채움)이 정보들을 ancient class로 저장하고 우선순위큐로 정렬했다.(중심의 위치가 i, j라고 했을때 비교는 문제에서 준대로 가치-> 회전각도 -> j-> i로 정렬함)여기서 가치는 높은 순대로 구현해야 하기에 어떻게 할지 고민해보았는데 reverse메소드는 오류가 나서가..

문제 링크성공 여부(걸린 시간): 성공(1시간 10분)아이디어우선 시간은 2초인데 모든 길을 단순 시뮬레이션으로 했을때아슬아슬하게 시간초과가 난다는 계산이 나왔다. 그래서 최대한 경사로를 설치할 수 있는지 직접 순회하여여부를 판단하는 방법은 피하려고 노력했다. 전반적인 코드의 순서는 이렇다.수평 수직 각각 연속으로 같은 수가 몇개 주어지는지 구하기(끝에서 시작부분에도 값을 동기화해줌)-> 수평 수직 각각 경사로 설치를 했을때 통행이 가능한지 개수 세어줌(설치를 안해도 통행이 가능하면 동일함) 내가 생각한 포인트는 연속된 수가 이어질때연속된 수의 시작과 끝에 해당 연속된 수가 몇개인지 구하고(일종의 누적합)그 수의 - 1 만큼저장하는 것이다.(인덱스 이동을 쉽게 하려고)그게 무슨 말이냐면예) 1 2 3 3..

문제 링크성공 여부(걸린 시간): 성공(2시간 20분)아이디어처음에는 골드1이라기엔 매우 간단한 문제라고 생각했다.그런데 설계해나가다 보니 상어의 움직임을 처리하는 것이 까다로웠는데조건에서 최악의 경우를 유추해보면 100 X 100 크기의 격자 모든 칸에 상어가 들었고그 상어의 s는 모두 최대인 1000이라고 가정했을때 상어를 움직이는 연산은 100번이므로직접 상어들을 움직여주는 로직으로 수행하기엔 너무나도 많은 연산이 필요하다.100 X 100 X 1000 X 100 = 10억그래서 난 재귀로 끝과 끝을 이동하게 하여 최대한 연산의 수를 줄였다. (뒤에 자세히 설명) 이제 전체적인 흐름을 설명하자면 나는 문제에 맞게 순서를 이렇게 구상했다.1. 낚시왕의 이동2. 낚시왕의 낚시(단순 row를 내려가면서 ..
문제 링크성공 여부(걸린 시간): 성공 (44분 39초)아이디어우선 BFS를 돌아주는데 다음 갈 수 있는 지점들을 매번 갱신해주며 가려고 했다.BFS는 시간마다 총 2번 시행된다.(불의 확산과 지훈이의 이동) 불의 확산불은 현재의 불들을 큐에 넣고 다음 불탈 수 있는 위치를 따로 ArrayList에 저장해준다.그다음 불의 확산 BFS가 끝나면 ArrayList에 저장된 불의 확산가능한 위치들을 큐에 다시 넣는다.이렇게 하면 턴(시간)마다 구분된 동작이 가능하다. 지훈이의 이동거의 동일한 방식으로 지훈이의 이동도 구현했다. 그러나 조금 다른점은지훈이가 다음 이동할 좌표를 추가할때 만약 좌표밖으로 나간다면이것은 무사히 탈출한 것이므로 시간을 출력하고 return해준다.그리고 다음 이동할 지훈이의 위치가 저장..
문제 링크성공 여부(걸린 시간): 성공(31분 52초)아이디어처음에는 일단 전부 BFS를 돈다고 했을때도 충분할 것 같다고 생각했고 (열만 다르면 중복해서 탐색함 ㅎㅎ..)계산해보니 최대 25000번 BFS를 돎 근데 BFS에서 한번에 최대 25000개의 블록을 방문할때25000^2 = 625000000 10초내로 가능하다고 생각하고 했더니 시간초과가 떠서 부분점수를 받게되었다. 그래서 느낀점 아슬아슬할때는 그냥 안전한 방법으로 하자 시간을 줄일 수 있는 방법을 고안해보았다. 사실 코드를 작성하다 생각났지만 외면했던 아이디어 BFS를 열마다 새롭게 전부 돌지않고 해당 석유 덩어리를 돌고 석유의 양을 전부 세었을때그 석유덩어리가 걸쳐있는 모든 열에 석유의 양을 마지막에 + 해준다.어떤식으로 했냐면 걸치는 ..
문제 링크성공 여부(걸린 시간): 실패(56분 5초)아이디어일단 처음에 생각한 순서는 이러했다.1. 소문자로 바꾼 헤드 기준으로 사전순 정렬2. head가 같으면 number 작은 순으로 stable하게 정렬3. 넘버도 같으면 들어온 순서 그대로4. 마지막에 도출된 순서대로 원본 파일명을 순서대로 넣어주고 return 일단 이렇게 하기 위해서 어떻게 문자열을 저장할건지가 관건이었다. 난 HashMap으로 소문자인 헤드가 key, 원본 head, 원본 number부분과 원본 tail을 나누어 저장하고추가로 int로 바꾼 nuber도 같이 저장해줄 (우선순위큐에 넣을때 int로 바꾼 number기준으로 정렬하기 위함)node로 저장한 우선순위큐를 value로 저장했다. 정렬기준은 처음에는 number 오름..
문제 링크성공 여부(걸린 시간): 성공(20분)아이디어사실 DP의 정말 간단한 문제라 이동할 수 있는 방향이 오른쪽과 아래쪽밖에 없기에위에서부터 반복문으로 해당 배열에서 이동할 수 있는 지점이라면 본인의 값을 더해준다.그렇게 의기양양하게 풀었는데...틀렸다.❌ 2^63-1보다 작거나 같다. 그렇다. long으로 저장해야한다.정답 코드import java.io.*;import java.util.*;class Main{ public static void main(String [] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integ..
문제 링크성공 여부(걸린 시간): ❌(20분)아이디어처음에는 순서를 전부 브루트포스로 조합하면 최대 17개의 노드를 0을 제외하고 모든 순서대로 조합했을때는 16! 이다. 사실 16!은 엣지를 생각치 않고 진짜 전부 돌려본 경우고만약 실제 노드 연결을 고려해서 노드 방문 순서를 작성하면 결국 연산수는 동일하지 싶다. (이진트리이기 때문에) 그당시엔 그렇게 생각을 못했고 생각한건 DFS로 해야한다는 것이었는데 방문한 노드들의 자식노드로 이동할때해당 노드의 다른 자식 노드도 다음 이동할 방문 리스트로 추가해야 했다. 그런데 도저히 방법이 떠오르지 않았고 그렇게 LV2라고 생각하고 있어서 20분이 지나자실패처리하고 힌트를 보았다... (알고보니 레벨 3 였음ㅎㅎ) 😅여기서 힌트를 보고 바로 풀어보았다. [P..
문제링크성공 여부(걸린 시간): 성공(2시간 27분)아이디어처음에 생각한 것은 순서: 상어입장-> 물고기 움직이기 -> 상어 이동에 맞게 크게 2가지로 구성했다.1.상어의 이동을 담당하는 재귀 함수(상어 위치, 맵 정보, 물고기 정보 배열, 먹은 물고기 번호의 합)2.상어가 이동하고 나서 번호순서대로 물고기가 이동하는 동작을 수행하는 물고기 움직이는 함수1번 shark함수에서 상어가 도착하고 물고기를 움직이고 상어가 다음 이동할 분기를 생성해주는 로직을 수행하는데이때 다음 상어에 대한 처리는 깊은 복사를 해주었다. 백트레킹 하듯 해주려고 했다.그러나 살아있는 모든 물고기가 움직이다 보니 물고기 정보나map을 매번 원상복구시키는 것이 복잡하다는 생각이 들었다. 그래서 4X4배열에 물고기의 종류도 16가지밖..
문제 링크성공 여부(걸린 시간): 1시간 55분 16초(성공)아이디어브루트포스로 전부 해보기엔 말도 안되는 시간이 나올것이라 생각해 카운팅소트처럼 하려고 했었다.그래서 시작과 끝을 순회하며 +1씩 넣어주며 그걸 누적합하여 adv_time을 텀으로 두어 차이를 구해 최대를 구하려했다. 🤔그런데 그것도 계산해보니 만약 play시간이 최대이고 전부 최대로 30만개가 들어오면+1씩 해주는 것만 해도 시간초과가 나는 상황이었다. 🐵그런데 불현듯 구간에 해당하는 모든 초들을 돌필요 없이처음에 1 그리고 끝 지점에 -1을 해주는 방식으로 처리를 한다. 예) 1~3초 (끝나는 시간은 카운트 않음)012345010-100누적합을 돌면 해당 초마다 로그가 몇개있는지 나오게 되고012345011000그걸 누적합을 한번 ..