본문 바로가기

프로그래머스 퀴즈(Python)/level 2

(81)
23.04.21 파이썬 코딩 퀴즈#232 요격 시스템 (프로그래머스 스쿨) 이번 문제는 요격 시스템 문제이다. 문제의 핵심은 미사일을 최소로 사용하여 모든 폭격 미사일을 요격하는 것이다. A 나라가 발사한 폭격 미사일은 x축에 평행산 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s,e) 형태로 표현된다. B 나라는 특정 x좌표에 y축에 수평이 되도록 미사일을 발사하며, 발사된 미사일은 해당 x 좌표에 걸쳐있는 모든 폭격 미사일을 관통하여 한번에 요걱 가능하다. 하지만 개구간(s, e)로 표현되는 미사일은 s와 e에서 발사하는 요격 미사일로 요격할 수 없습니다. 설명만 놓고 봐서는 무슨 말인지 감이 잡히지 않는다. 위 그림설명을 보니, 다시 글 설명이 이해가 된다. 먼저 targets 을 그림으로 나타내면 위와 같아지는데, 이때 개구간 안에서만 요격 가능하다. 개구간이랑 해..
23.04.20 파이썬 코딩 퀴즈#231 두 원 사이의 정수 쌍 (프로그래머스 스쿨) 이번 문제는 두 원 사이의 정수 쌍 문제이다. 2차원 좌표위에 반지금 r1, r2를 가지는 두개의 원이 존재하며, 두 원 사이의 공간안에 좌표(x,y)가 정수인 점의 개수를 구하는 문제이며, 각 원 위의 점도 포함되어야 한다. 특별한 제한 사항은 없다. 입출력 예 1 을 그림으로 나타낸 모습이다. 정수 좌표쌍의 형태를 보면 알겠지만, 먼저 안쪽원의 사각형 부분은 전부 정수쌍 좌표로 존재 가능하다. 그리고 바깥쪽 원은 상하좌우 4개의 정수 좌표쌍이 존재한다. 이제 사각형을 1x1 칸으로 나누었을 때 점의 개수를 확인해보자. 먼저 반지름 1인 원의 경우 총 4개의 1x1 사각형 위에 존재한다. 따라서 둘러싸는 사각형의 한변의 길이는 2가 된다. 그리고 총 4개의 변이 있으므로 점의 개수의 2x4 = 8 이 ..
23.04.20 파이썬 코딩 퀴즈#230 연속된 부분 수열의 합 (프로그래머스 스쿨) 이번 문제는 연속된 부분 수열의 합 이다. 문제는 굉장히 단순하다 전달받은 수열에서 임의의 두 인덱스 원소와 그 사이의 원소를 모두 포함하는 부분수열의 합이 k 가 되는 제일 짧은 구간의 수열을 찾아 해당 부분 수열의 첫번째 인덱스와 마지막 인덱스를 배열에 담아 return 하면 된다. 전체 sequence 의 길이는 100만이고, k 는 5 이상 10억 미만이다. 입출력 예 2번을 보면 return 값이 [6,6]이다. 즉 6번 인덱스 하나로도 부분 수열이 될 수 있다. 이런 문제들의 대부분은 dp 를 사용하는 문제가 많다. 하지만 해당 문제를 dp로 풀이하면 시간초과에 걸린다. 그래서 선택한 건 투포인터 유형으로 풀이를 진행하였다. 먼저 해당 k 가 sequence 안에 있는 경우는 바로 예외처리를 ..
23.04.19 파이썬 코딩 퀴즈#229 과제 진행하기 (프로그래머스 스쿨) 이번 문제는 과제 진행하기 문제이다. 음.. 설명을 정리하면 아래와 같다 1. 각 과제들은 시작 시간이 정해져 있다. 2. 새로운 과제를 시작할 시간이 되었다면, 기존에 진행중인 과제를 멈추고 새로운 과제를 시작한다. 3. 진행중인 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행하며, 만약 과제가 끝난 시간에 새로 시작해야할 과제와 멈춰둔 과제가 동시에 있다면 새로운 과제부터 시작한다. 4. 멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작한다. 제한사항을 보면 plans 의 원소가 [이름, 시작시간, 요구시간] 으로 주어진다. 그리고 과제가 끝나는 시각과 새로운 과제를 시작해야 하는 시각이 같은 경우에는 과제가 끝난 것으로 판단해야 한다. 입출력 예 1번은 순서대..
23.04.19 파이썬 코딩 퀴즈#228 광물 캐기 (프로그래머스 스쿨) 이번 문제는 광물 캐기 문제이다. 문제에는 곡괭이와 광물 두가지 요소가 존재하며, 곡괭이 역시 광물과 같은 종류가 있다. 다이아몬드 곡괭이는 광물에 상관없이 피로도 1을 소모하며, 철은 다이아몬드는 5이고 나머지 광물은 1씩 소모한다. 돌 곡괭이의 경우 다이아몬드를 캘때 25, 철을 캘때 5, 돌은 1의 피로도를 소모한다. 한가지 재미있는 규칙은, 모든 곡괭이는 광물의 종류와 상관없이 5개를 캔뒤 사용할 수 없다. 규칙은 다음과 같다. 1. 보유한 곡괭이중 아무거나 하나를 선택해 사용할 수 없을 때까지 사용해야 한다. (무조건 5개를 캐야 한다) 2. 광물은 주어진 순서대로만 캔다. 3. 광산에 모든 광물을 캐거나, 더 사용할 곡괭이가 없을 때까지 광물을 캔다. 위 규칙으로 광물을 캘 때, 작업을 끝내기..
23.04.18 파이썬 코딩 퀴즈#227 리코쳇 로봇(프로그래머스 스쿨) 이버 문제는 리코쳇 로봇 문제이다. 리코쳇 로봇은 보드게임의 일종으로, 격자모양의 보드 위에서 말을 움직이며 최소 몇 번 만에 시작 위치에서 목표 위치까지 도달할 수 있는지 말하는 게임이다. 이 게임에서 말은 상,하,좌,우 하나를 선택해서 움직이게 되며, 장애물이나 맨 끝에 부딪힐 때까지 미끄러져 이동하는 것을 한 번의 이동으로 한다. 게임의 설명을 잘 이해해야 한다. 보드의 끝이나 장애물에 부딪히지 않는다면 로봇은 멈추지 않는다. 즉 도착지점 G 의 사방이 막혀있거나, 사방이 뚫려있다면 절대 도달 할 수 없음을 의미한다. (예외로 G의 한 부분이 벽이라면 도달 가능하다.) 주어진 board를 확인하여 말이 목표위치에 도달하는데 최소 몇 번 이동해야 하는지를 return 해야 하며, 만약 도달할 수 없다..
23.04.18 파이썬 코딩 퀴즈#226 당구 연습(프로그래머스 스쿨) 이번 문제는 당구 연습 문제이다. 내가 좋아하는 당구 인데, 이걸 문제로 보니 일단 설명부터 머리가 아프다. 먼저 주어지는 당구대의 길이는 가로m , 세로 n 이고 머쓱이가 쳐야 하는 공이 놓인 위치 좌표를 나타내는 두 정수 startX, startY 가 주어진다. 그리고 매 회마다 목표로 해야하는 공들의 위치 좌표 쌍이 balls 에 주어진다. 이제 머쓱이는 한번 벽에 맞춘 다음 목표로 하는 공들을 정확하게 맞추어야 하는데, 여기서 입사각과 반사각이 등장한다. 입사각은 현재 공 위치에서 벽으로 진입하는 각도를 의미하고, 반사각은 그 공이 벽을 맞고 튀어나가는 각도를 의미하며, 입사각과 반사각은 동일하다. 반드시 벽을 한번 거치고 공을 맞추어야 하며, 이렇게 공을 맞추기 위해 공이 굴러간 거리의 최솟값의..
23.04.18 파이썬 코딩 퀴즈#225 혼자서 하는 틱택토 (프로그래머스 스쿨) 이번 문제는 혼자서 하는 틱택토 문제이다. 먼저 틱택토 게임이란, 3X3 보드에 "O" 와 "X"를 순서대로 표기하여, 가로,세로,대각선으로 3개가 같은 표시가 되면 승리하는 게임이다. ("O"가 선공이다) 게임에서는 혼자서 진행하게 되는데, 이렇게 혼자 진행하는 도중에 해당 플레이가 정상적인 플레이인지 비정상적인 플레이인지 확인이 필요하다. 특별한 재항 사항은 없다. 다만 정상정인 게임 사항이라면 1을 아니라면 0을 return 해야 한다. 입출력 예 1,2,3,4를 3X3 보드에 그려넣은 모습이다. 입출력 예 2 번은 OOO 가 된 시점에서 게임이 끝나야 하지만, XXX 로 게임이 더 진행된 모습이다. 따라서 정상적인 플레이가 아니다. 입출력 예 3 번은 O 가 선공임에도 불구하고 X 가 먼저 보드에..