미생물 격리
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl
시뮬레이션 문제. 쉬운 문제이다. 어떻게 더 깔끔하게 코드를 짤까?
풀이
- 초기 입력시, 미생물 정보를 배열에 저장한다.
- m 시간 동안, 저장한 미생물을 이동시키고 다음 경우를 고려한다.
- 약품 칠해져 있는 곳으로 이동한 경우
- 이동을 했는데 겹치는 경우
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl
시뮬레이션 문제. 쉬운 문제이다. 어떻게 더 깔끔하게 코드를 짤까?
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo
오래 걸렸다. 다른 풀이 방법은 없을까?
지도에 BC 정보들을 표시
① bc index를 표시함
② 중복되는 지점은 + 로 연결해서 표시 ( 지도의 type : String )
A, B 움직이며 충전
① 이동한 위치를 + 를 기준하여 자름 ( 1+3 : 1번 bc , 3번 bc 겹치는 지점 )
② BC 선택권이 겹치지 않는 경우, A 선택권 중 가장 power 센것과 B 선택권 중 가장 power 센것 더함
③ BC 선택권이 겹치는 경우, 모든 경우 비교 ( A : 1 2 3 , B : 2 3 => 3*2 번의 비교 )
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu
DFS 문제이다. 오래 걸렸다. 아직 DFS 실력이 부족하다.
DFS 메소드에 방문 체크 배열을 넘기고, 복사해서 사용하면 시간 초과가 발생한다.
각 방문 지점에서 할 것
원점으로 돌아왔을 때 사각형인지 확인하는 방법
길이가 4이상
방향 전환 횟수가 4 or 3
방향 전환 횟수가 4 인 경우
방향 전환 횟수가 3 인 경우
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq
소요시간 1시간. BFS 문제이다. 쉬운 문제이다. Queue에 넣어야 하는 경우의 수의 조건에서 시간이 오래 걸렸다.
더럽게 코드를 작성했다. 더 나은 방법은 없을까?
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH
경우의 수를 나눈 후 조건에 맞게 짜려고 하였다. 해설을 보고 DFS로 풀면 쉽게 풀 수 있다는 것을 알았다.
모든 행과 열을 차례대로 체크한다.
현재 위치와 다음 위치를 비교한다.
같은 높이인 경우 : 다음 위치 부터 체크
오르막인 경우 : 현재 위치 기준해서 왼쪽으로 경사로 둘 수 있는지 체크
내리막인 경우 : 현재 위치 기준해서 오른쪽으로 경사로 둘 수 있는지 체크
그 이외의 경우 : 이번 행이나 열은 실패
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH
전체 map size를 450 * 450 으로 하고 초기 위치를 i+175, j+175로 하였다. ( 왜?? )
생명력을 저장하고, 활성 상태를 체크하기 위해 map(450)(450)(0) 에는 생명력을, map(450)(450)(1) 에는 생명력*2를 저장한다. map(450)(450)(1) < map(450)(450)(0) 이 되면 활성상태가 되므로, 확장시킨다.
생명력 수치가 높은 줄기 세포를 먼저 확장 시키기 위해, 생명력에 따른 Queue를 저장하는 배열을 생성한다.
arr[1] : 생명력이 1인 줄기 세포의 좌표를 저장하는 Queue
arr[2] : 생명력이 2인 줄기 세포의 좌표를 저장하는 Queue
…
arr[10] : 생명력이 10인 줄기 세포의 좌표를 저장하는 Queue
생명력이 10인 큐 ~ 생명력이 1인 큐를 순차적으로 확인한다.
큐에 저장되어 있는 줄기세포를 하나씩 remove하여 활성화되어있는지 체크하여 확장한다.
쉬운 문제이다. 이 문제에서는 정렬과 진법 변환을 배울 수 있다.
정렬
오름차순 정렬 : Collections.sort(list)
내림차순 정렬 : Collections.sort(list) –> Collections.reverse(list)
진법 변환
string 을 radix 진법으로 변환 : Integer.parseInt(String s, int radix)
어려운 문제는 아니다. 방향은 잡았는데, 코드로 구현하는데 오래 걸렸다.
DFS는 다음 그림과 같이 진행한다. 구슬을 쏠 수 있는 칼럼은 0, 1, 2, 3 으로 4개가 있다고 하면,
재귀는 다음 그림과 같이 구현한다. 3을 기준으로 벽돌을 깬다고 하면,
3 기준 동서남북을 체크한다. 3의 동쪽을 깨는 중에, 9가 나오기 때문에, 9 위치에서 다시 재귀 함수를 호출 한다.
https://www.welcomekakao.com/learn/courses/30/lessons/42889?language=java
2019 카카오 신입 공채 1차 코딩 테스트
예를 들어, 스테이지 개수는 5개, 사용자가 각 스테이지에 현재 도전중인 스테이지 번호는 [2, 1, 2, 6, 2, 4, 3, 3]
각 스테이지의 실패율은 다음 그림과 같이 구한다.
Java 에서 정렬하기 위해서 java.util.Collections 클래스의 메소드인 sort()를 사용한다.
객체를 원소로 가진 리스트를 정렬하고자 할 때는, 객체가 Comparable interface를 구현해야 한다.