전체 글 349

[백준 1495번] 기타리스트 - java

문제 설명 1. 연주할 곡 N, 시작 볼륨 S, 최대 볼륨 M이 주어진다. 2. N개의 변경할 볼륨의 크기가 주어진다. 3. 모든 곡의 볼륨은 최대 볼륨 M을 넘어서는 안된다. 4. 마지막 곡에 연주 가능한 최대 볼륨을 구하면 된다. 풀이 과정 1. DP를 사용하는 문제이고, 적용 시점을 잘 고민해 봐야 한다. 2. 먼저 DP의 범위를 볼륨 M으로 설정하고, DP[A]의 값은 그 연주 시점으로 설정한다. 3. 예를 들어, 2번째 곡이 4, 8의 볼륨으로 연주 가능하면 DP[4] = 2, DP[8] = 2 이런 식이다. 4. 처음에 DP[S] = 0으로 설정하여 시작 볼륨을 구한다. 5. 다음 볼륨을 구하려면 현재 시점의 곡 순서에서 이전 시점에 불린 곡(DP[X]=현재시점-1 의 X값) 의 정보를 통해 ..

알고리즘 공부 2021.12.19

[백준 14226번] 이모티콘 - java

문제 설명 1. S가 주어진다. 1개의 이모티콘을 갖고 있다. 2. 1초마다 전체복사/붙여넣기/지우기 중 하나를 할 수 있다. 3. 1개의 이모티콘 -> S개의 이모티콘 을 만드는 최소의 연산을 구하면 된다. 풀이 과정 1. BFS를 생각하고 풀었는데, BFS적용 자체는 간단하지만 시간복잡도에서 터지지 않게 하는 것이 복잡했다. 2. BFS풀이법 - Queue를 구현한다. Queue는 ( 현재이모티콘수, 복사한이모티콘수, 걸린시간 ) 세 개의 구성을 갖는 class를 갖는다. - 시작은 1, 0, 0이다. ( 처음이모티콘 1개, 복사x, 0초) - 1초마다 걸리는 연산은 복사하기, 붙여넣기, 지우기이다. - 복사하기 : Queue에 ( 현재이모티콘수, 현재이모티콘수, 걸린시간+1 ) 을 해주면 된다. -..

알고리즘 공부 2021.12.16

[백준 2075번] N번째 큰 수 - java

문제 설명 1. N x N행렬이 주어진다. 2. 숫자들이 주어진다. 3. N번째에 해당하는 숫자를 구하면 된다. 풀이 과정 1. 이거 우선순위 큐를 이용해서 풀었는데, 내가 볼 때에는 문제의 조건 중 하나인 '아래 줄이 윗 줄의 숫자보다 크다'를 이용하려면 우선순위 큐를 두 번 사용하는게 좋을 것 같기는 하다. 2. 그런데 왜인지는 모르겠지만 그걸 쓰지 않고도 해결이 되었다(시간복잡도에서 손해를 많이 보는데도 통과된게 이상한 느낌) 3. 먼저 우선순위 큐를 사용하면 오름차순으로 정리되는데, 우선순위 큐에 큰 순서대로 N개를 저장해서 갱신해주면 맨 위가 해당 답이 될 것이다. 4. 그렇다면 총 N개가 N번 들어오기 때문에 처음에 N번 받을 때는 우선순위 큐에 모든 숫자를 받아준다. 5. 다음부터는 숫자를 ..

알고리즘 공부 2021.12.14

[프로그래머스] 행렬 테두리 회전하기 - java

문제 설명 1. 핼렬의 크기, 회전할 영역이 주어진다. 2. 그 영역을 회전시키고, 회전한 값들 중 가장 작은 값을 저장한다. 3. 출력하면 된다. 풀이 과정 1. 간단한 구현 문제이다. 2. 하나씩 이동하면 된다. 3. 현재 위치의 값을 locNum로 저장한다. locNum값을 temp에 저장한다. 이후 다음 위치로 이동한다. 4. 현재 위치의 값을 locNum에 저장한다. 현재 위치에 temp값을 저장한다. 이후 다음 위치로 이동한다. 5. 위의 3, 4로직을 시작부터 끝까지 프레임에 맞추어 진행하면 된다. 6. 실제 코드를 보면 쉽게 이해 가능하다. 코드

알고리즘 공부 2021.12.11

[백준 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으로 표현합니다. 정원에 최소 꽃 한 개는 피어..