전체 글 405

[백준 2668번] 숫자고르기 - java

문제 설명 1. 세로 두줄, 가로 N칸짜리 표가 주어진다. 2. N에 해당하는숫자들이 주어진다. 3. 0번Line숫자 -> 1번Line숫자 ->0번Line숫자 로 돌아오는 숫자들을 오름차순으로 출력한다. 풀이 과정 1. DFS와 Prority Queue를 이용하여 풀이한다. 2. 문제의 주요 골자는 map에 각 숫자를 적어두고 map[i]와 map[map[i]] 이런 식으로 함수를 쭉쭉 돌리면서 자기 자신의 숫자가 나타나면 되는 것이다. 1 2 3 4 5 3 5 1 5 1 map[1] = 3, map[map[1]] = 3 3. DFS에서 값들을 체크하면서 i -> map[i] -> map[map[i]] -> map[map[map[i]]] ..... 이렇게 도달하지 않은 곳까지 체크한다. 4. 자기 자신이..

알고리즘 공부 2021.12.02

COS Pro java 1급 후기 + 난이도

회사에서 시험비가 지원된다길래 한번 시험을 봐 보았다. 사실 코딩 테스트 공부를 어느정도 한 사람이라면, 1000점 만점에 600점 이상을 받으면 합격이기 때문에 시험 통과 자체는 굉장히 쉬울 것이다. 다만 테스트 케이스가 지원되지 않고, 주변 환경에 따라(나는 시험을 보는데 뒤에 학생 한명이 시험문제가 잘못됐다고 시험감독관님랑 싸우더니 키보드를 부숴질듯 치더라...) 점수가 약간 좌우되는 것 같다. 시험 시간도 90분이고 중간에 완성되면 나갈수도 있다. 또 기업에서 시행하는 코딩 테스트와 달리 빈칸 채우기, 한 줄 바꾸기 등 색다른 방식을 풀어볼 수도 있기 때문에 재미삼아 시험을 쳐 보는 것도 좋을 것 같다. 개인적으로 느끼는 전체적인 코딩 난이도는 백준 실버 1~4 사이로, 매우 평이하다. 시험 내용..

[백준 1629번] 곱셈- java

문제 설명 1. A, B, C가 주어진다. 2. A를 B만큼 곱하고 이를 C로 나누는 문제이다. 풀이 과정 1. 당연히 그냥 구하면 터진다. 2. 이걸 생각하면 쉽다. A^16 = (((A^2)^2)^2)^2 A^17 = A*(((A^2)^2)^2)^2 3. long형 함수에 B번 반복하기 위해 B를 인자로 넣고 재귀함수를 돌린다. 4. 그 다음 재귀에서 구해진 값을 재곱하고 C로 나누는 것을 반복하면 된다. 5. 그리고 인자가 홀수가 되면 그냥 A를 곱해주면 되는데, 이 이유는 홀수 인자를 갖는 경우는 재귀함수가 인자 1을 가질때까지 반복되거나, 시작할 때 홀수인 경우 두 개 밖에 없기 때문이다. 6. 조금만 생각하면 쉽게 구현할 수 있는 문제이지만, 아이디어를 구현하는것에서 문제가 생기면 오래 걸릴 ..

알고리즘 공부 2021.11.28

파트3. 함수 작성 - 메모장

문제 설명 한 줄에 K자를 적을 수 있는 메모장에 영어 단어들을 적으려 합니다. 영어 단어는 정해진 순서로 적어야 하며, 단어와 단어 사이는 공백 하나로 구분합니다. 단, 한 줄의 끝에 단어 하나를 완전히 적지 못한다면, 그 줄의 나머지 부분을 모두 공백으로 채우고 다음 줄부터 다시 단어를 적습니다. 예를 들어 한 줄에 10자를 적을 수 있고, 주어진 단어가 순서대로 ["nice", "happy", "hello", "world", "hi"] 인 경우 각 줄에 다음과 같이 적을 수 있습니다.('_'는 공백을 나타냅니다.) 첫째 줄 : "nice_happy" 둘째 줄 : "hello_____" 셋째 줄 : "world_hi" 이때, 둘째 줄에 "hello"를 적으면 단어를 적을 수 있는 남은 칸은 5칸이며,..

파트3. 함수 작성 - 숫자 뽑기

문제 설명 자연수가 들어있는 배열에서 숫자 K개를 선택하려 합니다. 이때, 선택한 숫자 중 가장 큰 수와 가장 작은 수의 차이가 최소가 되도록 해야합니다. 예를 들어 배열에 들어있는 숫자가 [9, 11, 9, 6, 4, 19] 이고, K = 4 라면 숫자 4개를 [9, 11, 9, 6]로 뽑으면 (가장 큰 수 - 가장 작은 수) = (11 - 6) = 5가 됩니다. [9, 9, 6, 4] 와 같이 숫자를 뽑아도 (가장 큰 수 - 가장 작은 수) = (9 - 4) = 5가 됩니다. 그러나 가장 큰 수와 가장 작은 수의 차이가 5보다 작아지도록 숫자 4개를 선택하는 방법은 없습니다. 자연수가 들어있는 배열 arr, 선택해야 하는 숫자 개수 K가 매개변수로 주어질 때, 선택한 숫자중 가장 큰 수와 가장 작은 ..

파트3. 함수 작성 - 꽃피우기

문제 설명 정사각형 크기 격자 모양 정원에 칸마다 핀 꽃 또는 피지 않은 꽃을 심었습니다. 이 정원의 꽃이 모두 피는 데 며칠이 걸리는지 알고 싶습니다. 핀 꽃은 하루가 지나면 앞, 뒤, 양옆 네 방향에 있는 꽃을 피웁니다. 현재 정원의 상태를 담은 2차원 배열 garden이 주어졌을 때, 모든 꽃이 피는데 며칠이 걸리는지 return 하도록 solution 메소드를 작성해주세요. 매개변수 설명 현재 정원 상태를 담은 2차원 배열 garden이 solution 메소드의 매개변수로 주어집니다. 정원의 한 변의 길이는 2 이상 100 이하입니다. 정원 상태를 담은 2차원 배열 garden의 원소는 0 또는 1 입니다. 이미 핀 꽃은 1로 아직 피지 않은 꽃은 0으로 표현합니다. 정원에 최소 꽃 한 개는 피어..

파트2. 한 줄 바꾸기 - 카드셔플

카드셔플 문제 설명 1부터 n까지 숫자가 적힌 카드 뭉치를 다음 규칙에 따라 카드 뭉치를 섞었을 때, 아래에서부터 k번째에 있는 카드에 적힌 숫자를 알아내려합니다. 카드 뭉치 가장 아래에는 1이 쓰여있으며, 위로 갈수록 숫자가 커집니다. 카드 뭉치를 섞는 규칙은 다음과 같습니다. 1. 카드 뭉치를 정확히 반으로 나눕니다. 2. 두 개로 나뉜 카드 뭉치를 교차로 섞어서 카드 뭉치 하나를 만듭니다. 이때, 항상 1이 적힌 카드가 있는 뭉치를 아래로 놓고 섞습니다. 3. 위 과정을 반복합니다. 예를 들어, 1부터 6까지 숫자가 적힌 카드 뭉치를 3번 섞는다면 과정별로 아래에서부터 적힌 숫자는 다음과 같습니다. 횟수카드 뭉치 1 [1, 4, 2, 5, 3, 6] 2 [1, 5, 4, 3, 2, 6] 3 [1, ..

파트2. 한 줄 바꾸기 - 보드게임

문제 설명 A 게임은 4x4 격자 모양의 보드의 가장 왼쪽 위에서 가장 오른쪽 아래로 말을 이동시키면서 각 구역에 있는 코인을 획득하는 게임입니다. 이때, 말은 오른쪽 또는 아래쪽으로만 이동할 수 있습니다. 예를 들어, 보드가 아래와 같다면 아래의 경우가 코인을 최대로 획득할 수 있는 경우이고 이때 획득하는 코인은 38입니다. 각 구역에서 획득할 수 있는 코인 양을 담은 2차원 배열 board가 매개변수로 주어질 때, 최대로 획득할 수 있는 코인의 양을 return 하도록 solution 메소드를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요. 매개변수 설명 각..

파트2. 한 줄 바꾸기 - 종이접기

문제 설명 4 x 4 크기인 정사각형 종이가 1 x 1 크기인 격자 칸으로 나누어져 있습니다. 이 종이를 가로축 혹은 세로축에 평행한 격자 선을 따라 한 번 접었을 때, 만나는 격자 칸에 적힌 숫자의 합이 최대가 되도록 하려 합니다. 종이를 접을 때는 만나는 격자 칸이 정확히 일치하도록 해야 합니다. 예를 들어 다음과 같이 4 x 4 크기인 종이가 있을 때, 종이는 점선 중 하나를 따라서 접을 수 있습니다. 이때, 붉은색 점선을 따라 종이를 접으면 36과 19가 적힌 칸이 정확히 만납니다. 두 숫자의 합은 55이며, 이때가 최댓값입니다. 4 x 4 크기인 정사각형 종이의 각 격자 칸에 적힌 숫자가 담긴 배열 grid가 매개변수로 주어질 때, 종이를 접었을 때 만나게 되는 격자 칸에 적힌 숫자의 합 중 최..

파트1. 빈 칸 채우기 - 아르바이트, 판매사원

아르바이트,판매사원 문제 설명 직업에 아르바이트, 판매사원이 있습니다. 직원들 급여의 총합을 계산하기 위해 아래와 같이 Job, PartTimeJob, SalesJob 클래스를 작성했습니다. Job : Job : 직업을 나타내는 클래스입니다. salary : 직업의 급여를 나타냅니다. 초기 급여는 0입니다. getSalary : 직업의 급여를 return 합니다. PartTimeJob : PartTimeJob : 아르바이트를 나타내는 클래스이며 Job을 상속합니다. workHour : 아르바이트를 한 시간입니다. payPerHour : 아르바이트의 시간 당 급여입니다. getSalary : 아르바이트 급여를 계산하여 return 합니다. SalesJob : SalesJob : 판매사원을 나타내는 클래스이..