미생물 격리

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl

시뮬레이션 문제. 쉬운 문제이다. 어떻게 더 깔끔하게 코드를 짤까?

풀이

  1. 초기 입력시, 미생물 정보를 배열에 저장한다.
  2. m 시간 동안, 저장한 미생물을 이동시키고 다음 경우를 고려한다.
    • 약품 칠해져 있는 곳으로 이동한 경우
    • 이동을 했는데 겹치는 경우
Read more

무선 충전

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo

오래 걸렸다. 다른 풀이 방법은 없을까?

풀이

  1. 지도에 BC 정보들을 표시

    ① bc index를 표시함

    ② 중복되는 지점은 + 로 연결해서 표시 ( 지도의 type : String )

  2. A, B 움직이며 충전

    ① 이동한 위치를 + 를 기준하여 자름 ( 1+3 : 1번 bc , 3번 bc 겹치는 지점 )

    ② BC 선택권이 겹치지 않는 경우, A 선택권 중 가장 power 센것과 B 선택권 중 가장 power 센것 더함

    ③ BC 선택권이 겹치는 경우, 모든 경우 비교 ( A : 1 2 3 , B : 2 3 => 3*2 번의 비교 )

Read more

디저트 카페

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu

DFS 문제이다. 오래 걸렸다. 아직 DFS 실력이 부족하다.

DFS 메소드에 방문 체크 배열을 넘기고, 복사해서 사용하면 시간 초과가 발생한다.

풀이

  • 각 방문 지점에서 할 것

    • 방문 체크
    • 현 위치 기준으로 대각선 네 방향 체크
  • 원점으로 돌아왔을 때 사각형인지 확인하는 방법

    • 길이가 4이상

    • 방향 전환 횟수가 4 or 3

      • 방향 전환 횟수가 4 인 경우

      • 방향 전환 횟수가 3 인 경우

Read more

탈주범 검거

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq

소요시간 1시간. BFS 문제이다. 쉬운 문제이다. Queue에 넣어야 하는 경우의 수의 조건에서 시간이 오래 걸렸다.

더럽게 코드를 작성했다. 더 나은 방법은 없을까?

풀이

  1. map에 터널 상태를 저장한다.
  2. 현재 위치에서 이동 가능한 위치를 큐에 넣는다. (이동 가능한 위치는 터널 상태를 보고 파악한다)
  3. 큐에서 pop한 위치에서 2번을 반복한다.
  4. depth가 문제에서 주어진 시간이 되었을 때, 큐에 넣었던 위치 개수를 출력한다.
Read more

활주로 건설

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH

경우의 수를 나눈 후 조건에 맞게 짜려고 하였다. 해설을 보고 DFS로 풀면 쉽게 풀 수 있다는 것을 알았다.

풀이

  1. 모든 행과 열을 차례대로 체크한다.

  2. 현재 위치와 다음 위치를 비교한다.

    • 같은 높이인 경우 : 다음 위치 부터 체크

    • 오르막인 경우 : 현재 위치 기준해서 왼쪽으로 경사로 둘 수 있는지 체크

    • 내리막인 경우 : 현재 위치 기준해서 오른쪽으로 경사로 둘 수 있는지 체크

    • 그 이외의 경우 : 이번 행이나 열은 실패

코드

Read more

줄기세포배양

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE

풀이

  1. 전체 map size를 450 * 450 으로 하고 초기 위치를 i+175, j+175로 하였다. ( 왜?? )

  2. 생명력을 저장하고, 활성 상태를 체크하기 위해 map(450)(450)(0) 에는 생명력을, map(450)(450)(1) 에는 생명력*2를 저장한다. map(450)(450)(1) < map(450)(450)(0) 이 되면 활성상태가 되므로, 확장시킨다.

  3. 생명력 수치가 높은 줄기 세포를 먼저 확장 시키기 위해, 생명력에 따른 Queue를 저장하는 배열을 생성한다.

    arr[1] : 생명력이 1인 줄기 세포의 좌표를 저장하는 Queue

    arr[2] : 생명력이 2인 줄기 세포의 좌표를 저장하는 Queue

    arr[10] : 생명력이 10인 줄기 세포의 좌표를 저장하는 Queue

  4. 생명력이 10인 큐 ~ 생명력이 1인 큐를 순차적으로 확인한다.

  5. 큐에 저장되어 있는 줄기세포를 하나씩 remove하여 활성화되어있는지 체크하여 확장한다.

Read more

보물상자 비밀번호

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE

쉬운 문제이다. 이 문제에서는 정렬과 진법 변환을 배울 수 있다.

풀이

  1. 회전 시키고
  2. 각 변 확인하며 리스트에 저장

개념

  1. 정렬

    오름차순 정렬 : Collections.sort(list)

    내림차순 정렬 : Collections.sort(list) –> Collections.reverse(list)

  2. 진법 변환

    string 을 radix 진법으로 변환 : Integer.parseInt(String s, int radix)

코드

Read more

벽돌깨기

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo&categoryId=AWXRQm6qfL0DFAUo&categoryType=CODE&&&

어려운 문제는 아니다. 방향은 잡았는데, 코드로 구현하는데 오래 걸렸다.

풀이

  1. 구슬 선택 : DFS
  2. 벽돌 깨기 : 재귀

DFS는 다음 그림과 같이 진행한다. 구슬을 쏠 수 있는 칼럼은 0, 1, 2, 3 으로 4개가 있다고 하면,

재귀는 다음 그림과 같이 구현한다. 3을 기준으로 벽돌을 깬다고 하면,

3 기준 동서남북을 체크한다. 3의 동쪽을 깨는 중에, 9가 나오기 때문에, 9 위치에서 다시 재귀 함수를 호출 한다.

Read more

실패율

https://www.welcomekakao.com/learn/courses/30/lessons/42889?language=java

2019 카카오 신입 공채 1차 코딩 테스트

풀이

  1. stages 배열을 순회하며 각 스테이지마다 남아 있는 인원수를 체크한다.
  2. 각 스테이지마다 실패율을 계산하여 스테이지 번호와 실패율을 리스트에 저장한다.
  3. 리스트를 실패율을 기준으로 내림차순 정렬한다.

예를 들어, 스테이지 개수는 5개, 사용자가 각 스테이지에 현재 도전중인 스테이지 번호는 [2, 1, 2, 6, 2, 4, 3, 3]

각 스테이지의 실패율은 다음 그림과 같이 구한다.

개념

Java 에서 정렬하기 위해서 java.util.Collections 클래스의 메소드인 sort()를 사용한다.

객체를 원소로 가진 리스트를 정렬하고자 할 때는, 객체가 Comparable interface를 구현해야 한다.

Read more