[프로그래머스] 리코쳇 로봇 - Java(자바)
·
자바/코딩테스트
문제 이해리코쳇 로봇이라는 보드게임이 있습니다.게임판에는 "." - 빈공간, "R" - 로봇, "D" - 장애물, "G" - 목표지점 으로 구성되어있고 "R", "G는 무조건 하나씩 존재합니다.로봇이 목표지점으로 갈 수 있는 최소의 경로를 찾아야합니다.로봇은 상하좌우로 움직일수 있으며 한번 움직일때 미끄러져서 맨끝까지 가거나 장애물을 만나기전까지 멈추지 않습니다.로봇이 목표지점으로 갈 수 없다면 -1로 return 해주세요로봇이 상하좌우 움직일때마다 맨끝까지 or 장애물에 멈추게 move 함수를 만든다.0 - 상 , 1 - 하, 2 - 좌, 3 - 우 로 판단하여 만들었다.움직일 때마다 이동 count + 1 하고 방문했던적이 없다면 큐에 집어 넣고 아니라면 방향을 바꿔가며 이동한다.이동한 좌표가 "G"..
[프로그래머스] 야근 지수 - Java(자바)
·
자바/코딩테스트
문제 이해N 시간 동안 야근을 해야한다.작업량 works 배열만큼 남아있는데 이 작업량은 1시간에 1만큼 줄어들며 N시간이 다 지난후 작업량들의 제곱 합이 야근의 피로도이다.피로도를 최소화하고자 한다.문제를 보면 작업량들의 제곱 합이 최소값이 되도록 해야한다. 그렇다는건 작업량들의 수치들이 모두 비슷한 값이면 제곱 합이 되면 최소값이 될 수 있다는 뜻이다.N시간 보다 남은 작업량이 작다면 피로도는 0으로 return 해준다.작업량을 모두 근사치로 만들기 위해 작업량의 최대값을 뽑아 -1 씩 빼는걸 N시간 만큼 반복할 것이다.반복과 정렬이 모두 가능하도록 우선순위 큐 PriorityQueue 를 사용하고자 한다.큐의 최대값을 뽑은 값을 -1을 하여 다시 집어 넣는 방식을 N 이 0이 될때까지 반복한다.큐의..
[프로그래머스] 행렬 테두리 회전하기 - Java(자바)
·
자바/코딩테스트
문제 이해rows x , columns y 의 행을 가지고 있는 행렬이 있다.queries 배열에는 (x1,y1,x2,y2) 의 좌표값을 가지고 있는데 해당 좌표 (x1,y1) 에서 (x2,y2) 범위를 지정하여 테두리 영역만 시계방향으로 한번 회전 시킨다.queries 배열에 있는 만큼 회전을 반복한다.회전 할때마다 나오는 최소값들을 배열에 담아서 나타내라.소용돌이 문제로 인식하여 좌표범위의 영역을 상,하,좌,우 방향으로 회전시키면서 배열에 저장시켰다.시계방향으로 회전하면서 이전 좌표의 값을 한칸씩 옮겨야하는데 현재 배열을 그대로 사용하면 이전 좌표값의 값을 알수 없기에 copyArr 배열을 준비하여 소용돌이를 도는동안 copyArr 배열의 값으로 이전 좌표값을 알아낼수 있다.소용돌이가 한바퀴 완료하면..
[프로그래머스] 두 큐 합 같게 만들기 - Java(자바)
·
자바/코딩테스트
문제 이해길이가 같은 큐 두개가 주어진다.큐에 들어간 원소의 합이 같아지게 pop,insert의 작업을 한다.작업의 횟수가 최소값인 경우를 구해야 한다.원소의 값은 10^9 까지이고 원소의 개수는 30만개로 sum을 구하기에는 스택오버 플로우가 일어나기때문에 sum 타입을 long으로 해준다.최소횟수를 구하기 위해서 주어진 두 큐의 합을 비교한다.                                                                                            큰합계(큐) -> 작은합계(큐) 원소를 큰합 큐에서 poll 작은합 큐로 원소를 insert위 처럼 큐를 pop, insert 하면서 두큐의 합계가 같아 질때까지 반복한다.예#3 번처럼 원소의 합이 ..
[프로그래머스] 거리두기 확인하기 - Java(자바)
·
자바/코딩테스트
문제 이해5X5 대기실이 5개가 있다.거리두기를 잘지켜지는지 확인해야한다.거리두기는 맨해튼 거리 2이하로 앉지 말아야 한다.응시자가 앉아 있는 자리 사이에 파티션으로 막혀있을 경우 맨해튼 거리 2이하도 허용된다.맨해튼 거리 2이하를 생각하였을때 P좌표에서 상하좌우를 총 2번 이내로 움직였을때 또다른 P가 있다면 맨해튼 거리 2이하다.해당 P1좌표가 갈수 있는 위치는 아래 표와 같다.P1좌표를 상하좌우 표시를 하고 P2좌표를 상하좌우 표시하면 중첩되는곳이 있다면 거리두기 실패이다.중첩을 찾아내기 위해 P좌표가 방문한곳은 visit 배열로 관리하였다.P1 갈 수 있음P1 갈 수 있음P1 갈 수 있음 P1 갈 수 있음P1  || P2 갈수 있음P1 갈 수 있음 P2 갈수 있음 P1 갈 수 있음P1 갈 수 있음..
[프로그래머스] 괄호 변환 -Java(자바)
·
자바/코딩테스트
1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다. 4-2. 문자열 v에 대해 1단계부터 재귀적으로 수행한 결과 문자열을 이어 붙입니다. 4-3. ')'를 다시 붙입니다. 4-4. u의 첫 번째와 마지막 문자를 제거하고,..
[프로그래머스] [1차] 프렌즈4블록 - Java(자바)
·
자바/코딩테스트
문제 이해2x2 형식의 같은 그림이 나오면 해당 블럭은 터진다.라인별로 터지는게 아니라 곂치는게 존재해도 그 형태가 2x2라면 터지기 때문에 2x3 도 가능 하고 다양한 형태로 터지기 가능하다.한번 다 터지면 터진거 제외한 블럭이 내려오기 때문에 while 로 만들었고 터지는게 한개도 없다면 빠져 나오게 만들었다.블럭의 개수는 30x30 이하이기에 이중for문을 돌려서 해당 좌표의 우측, 아래, 우측 대각선 아래 의 세가지 값이 같다면 터져야할 블럭의 대상으로 check 배열에 true 변경하였다.터진 블럭을 제외하고 아래로 내려야 하기에 터트리고 값들을 stack에 담아 배열 끝부터 채워넣으면서 위와 같은 방식을 반복하게 만들었다.import java.util.*;class Solution { p..
[프로그래머스] 단어 변환 - Java(자바)
·
자바/코딩테스트
문제 이해 한번에 한 알파벳만 바꿀 수 있다. 한번에 문자열의 한 알파벳만 바꾸면서 words에 포함된 단어로 변경, target에 최소한의 과정으로 변환 가능한 숫자를 구하여라 한번에 한 알파벳만 바꿔서 words에 포함된 문자열을 구하는건 begin 문자열과 한개의 알파벳만 다르다는걸 의미한다. bfs 방법으로 최소한의 과정을 구하기로 했다. 큐와 방문자 배열을 생성하여 한개의 알파벳만 다른걸 구한다. words의 단어가 한개의 알파벳만 다르고 방문한적이 없다면 (여태까지 방문한 횟수 + 1 )을 방문자 배열에 집어 넣는다. import java.util.*; class Solution { public int solution(String begin, String target, String[] word..
[프로그래머스] 삼각 달팽이 - Java(자바)
·
자바/코딩테스트
1 0 0 0 2 9 0 0 3 10 8 0 4 5 6 7 문제 이해 소용돌이 문제와 유사하다. 실제로는 2차원 배열로 넣었을때 위와 같은 모양을 띈다. x 증가 -> x의 끝 도달 -> y 증가 -> y의 끝 도달 -> x 감소 y 감소 이런식의 반복이 이루어진다. bfs 방식으로 방문했는지 안했는지를 값이 0이냐 아니냐로 비교하였다. 방문여부 || x, y 좌표의 위치에 따라 dir값 (0 - 왼쪽 대각선 아래, 1 - 오른쪽, 2 - 왼쪽 대각선 위) 세팅해준다. 배열의 총 개수는 순차수열로 생성하였고 배열의 개수만큼 num이 증가하면 while문을 나오게 만들었다. import java.util.*; class Solution { public int[] solution(int n) { int[][..
[프로그래머스] 무인도 여행 -Java(자바)
·
자바/코딩테스트
문제 이해 무인도 여행을 하려고 한다. 각 섬마다 며칠동안 머물수 있는지 문자열로 나와있다. 각 무인도마다 머무를 수 있는 일수가 나와있고 바다를 건너지 않고 상하좌우 움직여서 최대한 며칠을 버틸 수 있는지 구하여라 배열로 생성하여 오름차순 하여라 문자열을 반복하면서 X 즉 바다가 아닌 무인도를 발견하고 visit 배열에 방문했는지 기록한다. 발견한 무인도의 상하좌우의 무인도가 방문했던 무인도인지 확인 후 방문하지 않았으면 큐에 해당 좌표를 넣고 visit 배열에 방문했다고 변경한다. 위 처럼 처음 발견된 무인도를 기준으로 더이상 발견되지 않을때까지 반복하면서 큐에 좌표를 넣고 최대 일수를 계속 더한다. 더이상 무인도가 발견되지 않으면 바다를 건너야하는 상황임으로 list에 최대 일수를 저장한다. imp..
[프로그래머스] 하노이의 탑 - Java(자바)
·
자바/코딩테스트
문제 이해 하노이의 탑은 재귀함수 대표 문제이다. 하노이탑의 핵심은 크기가 N인 원반을 시작 점에서 목표 점으로 옮기기 위해서는, 크기가 N-1인 원반을 보조 점으로 먼저 옮기는 것이다. from -> other 로 옮기고 other -> to로 이동하는 재귀함수로 반복하여 리스트에 담으면 된다. import java.util.*; class Solution { static List list = new ArrayList(); public int[][] solution(int n) { hanoi(n,1,3,2); int[][] answer = new int[list.size()][2]; for(int i = 0; i
[프로그래머스] 정수 삼각형 - Java(자바)
·
자바/코딩테스트
문제 이해 삼각형의 꼭대기에서 바닥까지 이어오는 경로중 숫자의 합이 가장 큰 경우를 찾아라 이 문제의 경우 이어지는 경로라고 되어있다. 아래로 내려갈때 대각선 방향의 왼쪽 오른쪽으로만 이동 가능하다. DP로 문제를 해결하고자 했다. 문제와는 다르게 반대로 아래에서 위로 왼쪽 오른쪽을 각자 더했을때 더 큰 숫자를 배열에 남기기로 했다. 아래에서 위로 비교할때 index가 0보다 작을 경우를 체크하면서 값을 채워나가게 했다. import java.util.*; class Solution { public int solution(int[][] triangle) { int answer = 0; int[][] dp = new int[triangle.length+1][triangle.length]; for(int i..
대전집주인
'자바/코딩테스트' 카테고리의 글 목록