본문 바로가기

코딩 테스트/PROGRAMMERS

[Java] Lv.2 유사 칸토어 비트열 문제  프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이비트열이 11011이라고 할 때 이때 각 자리수를 01234(1~5구역)로 두게되면 0의 위치는 n * 5  + 2(3구역)이다.즉 자리수 i에 대해 i  % 5 == 2가 성립하게 되면 그 자리는 0이다.다만 n이 무수히 증가 할 때 2번째 자리(3구역)에 위치한 0은 무수한 0의 5제곱 수 이다. 이 0들은 바로 % 5를 해버리면 어떤 값이 나오든 0인지 1인지 구할 수 없게 된다. 그래서 해당 자리 수의 몫( i / 5)을 구하면 그 0들의 이전 구간으로 축소된다. 더보기무슨 소리인고 하니 .. 더보기
[Java] Lv.2 마법의 엘리베이터 문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이소스코드의 주석에도 달아놨지만결국 1의 자리 수를 하나하나 검사해 나갈때 6이상이면 층 수를 올리고 4이하면 층 수를 내리면 된다. 이때 5인 경우가 있는데 이때는 다음 10의 자리수가 5이상인지 이하인지만 생각하면 된다.5이상인 경우 층 수를 올리고 미만인 경우 내린다.더보기1의 자리수가 5일 때 10의 자리수가 5이상이면 올리는 이유는 층수를 올리는 경우 다음 자리수에 +1의 영향을 주게된다. 즉 5이상일 때 +1의 영향을 받아 10의 자리수를 올릴 때의 이동 층수를 하나 감소 시켜준다.반대로 .. 더보기
[Java] Lv.2 택배 배달과 수거하기 문제 문제 풀이스택을 활용한 풀이를 진행했다.처음부터 마지막 집까지 배달 / 수거해야하는 상자의 개수만큼 각각의 스택에 push한다.이후 두 스택 중 하나가 빌때까지 cap의 크기만큼 스택을 비우고 두 스택 중 들어있는 집번호 크기가 큰 쪽 * 2를 활용하여 이동거리를 +해준다. 이후 비지않은 남은 스택을 빌때까지 cap수만큼 pop 해주며 이동 거리를 더해준다. 자바 코드import java.util.*;class Solution { private final Stack deliver = new Stack(); private final Stack pickup = new Stack(); public long solution(int cap, int n, int[] deliveries, int.. 더보기
[Java] Lv2 시소 짝꿍 문제문제 풀이이론은 아래의 블로그에서 참고하였다. [Java] 프로그래머스 시소 짝꿍문제 https://school.programmers.co.kr/learn/courses/30/lessons/152996?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기0713k.tistory.com 이분 탐색을 이용한 풀이법이다.4가지 조건을 생각한다.a == ba * 2 == ba * 3 == b * 2a * 4 == b * 34조건을 만족한다면 answer + 1 해준다.이때 다른 조건을 보지 않도록 a 더보기위의 말이 무슨 소리 인고 하니만약 a, b 두 숫자를 뽑았을 때 a가 더 클 경우a * 2 == b 등의 조.. 더보기
[Java] Lv.2 미로 탈출 문제문제 설명1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다.각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다.통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다. 레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다.미로에서 한 칸을 이동하는데 1초가 걸린다고 할 때, 최대한 빠르게 미로를 빠져나가는데 걸리는 시간을 구하려 합니다.미로를 나타낸 문자열 배열 maps가 매개변수로 .. 더보기
[Java] Lv.2 혼자서 하는 틱택토 문제문제 설명틱택토는 두 사람이 하는 게임으로 처음에 3x3의 빈칸으로 이루어진 게임판에 선공이 "O", 후공이 "X"를 번갈아가면서 빈칸에 표시하는 게임입니다. 가로, 세로, 대각선으로 3개가 같은 표시가 만들어지면 같은 표시를 만든 사람이 승리하고게임이 종료되며 9칸이 모두 차서 더 이상 표시를 할 수 없는 경우에는 무승부로 게임이 종료됩니다.할 일이 없어 한가한 머쓱이는 두 사람이 하는 게임인 틱택토를 다음과 같이 혼자서 하려고 합니다.혼자서 선공과 후공을 둘 다 맡는다.틱택토 게임을 시작한 후 "O"와 "X"를 혼자서 번갈아 가면서 표시를 하면서 진행한다.틱택토는 단순한 규칙으로 게임이 금방 끝나기에 머쓱이는 한 게임이 종료되면 다시 3x3 빈칸을 그린 뒤 다시 게임을 반복했습니다. 그렇게 틱택토.. 더보기
[Java] Lv.2 당구 연습 문제 문제 설명프로그래머스의 마스코트인 머쓱이는 최근 취미로 당구를 치기 시작했습니다.머쓱이는 손 대신 날개를 사용해야 해서 당구를 잘 못 칩니다. 하지만 끈기가 강한 머쓱이는 열심히 노력해서 당구를 잘 치려고 당구 학원에 다니고 있습니다.오늘도 당구 학원에 나온 머쓱이에게 당구 선생님이"원쿠션"(당구에서 공을 쳐서 벽에 맞히는 걸 쿠션이라고 부르고,벽에 한 번 맞힌 후 공에 맞히면 원쿠션이라고 부릅니다) 연습을 하라면서 당구공의 위치가 담긴 리스트를 건네줬습니다.리스트에는 머쓱이가 맞춰야 하는 공들의 위치가 담겨있습니다.머쓱이는 리스트에 담긴 각 위치에 순서대로 공을 놓아가며 "원쿠션" 연습을 하면 됩니다. 이때, 머쓱이는 항상 같은 위치에 공을 놓고 쳐서 리스트에 담긴 위치에 놓인 공을 맞춥니다.머쓱.. 더보기
[Java] Lv.2 리코쳇 로봇 문제문제 설명리코쳇 로봇이라는 보드게임이 있습니다.이 보드게임은 격자모양 게임판 위에서 말을 움직이는 게임으로,시작 위치에서 목표 위치까지 최소 몇 번만에 도달할 수 있는지 말하는 게임입니다.이 게임에서 말의 움직임은 상, 하, 좌, 우 4방향 중 하나를 선택해서게임판 위의 장애물이나 맨 끝에 부딪힐 때까지 미끄러져 이동하는 것을 한 번의 이동으로 칩니다.다음은 보드게임판을 나타낸 예시입니다....D..R.D.G.......D.DD....D...D....여기서 "."은 빈 공간을, "R"은 로봇의 처음 위치를, "D"는 장애물의 위치를, "G"는 목표지점을 나타냅니다.위 예시에서는 "R" 위치에서 아래, 왼쪽, 위, 왼쪽, 아래, 오른쪽, 위 순서로 움직이면 7번 만에 "G" 위치에 멈춰 설 수 있으며,.. 더보기