본문 바로가기

728x90

파이썬

(171)
[백준] 2628번 종이자르기 [Python] 직사각형의 자를 위치를 알려주고, 잘린 조각 중 최대 넓이를 구하는 문제 더보기 문제 아래 과 같이 직사각형 모양의 종이가 있다. 이 종이는 가로방향과 세로 방향으로 1㎝마다 점선이 그어져 있다. 가로 점선은 위에서 아래로 1번부터 차례로 번호가 붙어 있고, 세로 점선은 왼쪽에서 오른쪽으로 번호가 붙어 있다. 점선을 따라 이 종이를 칼로 자르려고 한다. 가로 점선을 따라 자르는 경우는 종이의 왼쪽 끝에서 오른쪽 끝까지, 세로 점선인 경우는 위쪽 끝에서 아래쪽 끝까지 한 번에 자른다. 예를 들어, 의 가로 길이 10㎝이고 세로 길이 8㎝인 종이를 3번 가로 점선, 4번 세로 점선, 그리고 2번 가로 점선을 따라 자르면 와 같이 여러 개의 종이 조각으로 나뉘게 된다. 이때 가장 큰 종이 조각의 넓이는 30㎠..
[백준] 1193번 분수찾기 [Python] - 정수의 합 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 더보기 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 출력 첫째 줄에 분수를 출력한다. https://www.acmicpc.net/problem/1463 1, 2~3, 4~6, 7~10 ,,, 번째 분수는 각각 분자..
[백준] 1463번 1로 만들기 [Python] - 다이나믹 X를 3으로 나누거나 2로 나누거나 1을 빼서 가장 빠르게 1로 만드는 횟수 구하는 문제 더보기 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. https://www.acmicpc.net/problem/1463 덱을 이용해서 각 연산을 한 결과를 저장하고, 가장 먼저 연산한 수를 꺼내서 1이 될 때까지 반복합니다. 0으..
[프로그래머스] Lv.1 공원 산책 [Python] 2차원 배열로 주어진 시작점 "S", 길 "O", 장애물 "X"로 이루어진 공원 정보인 park와 "방향 거"를 원소로 갖는 배열 명령을 담은 routes를 통해 명령에 따라 이동하되 장애물을 만나거나 공원을 벗어나면 그 명령은 무시하는 방식으로 최종 목적지를 반환하는 문제 더보기 문제 설명 지나다니는 길을 'O', 장애물을 'X'로 나타낸 직사각형 격자 모양의 공원에서 로봇 강아지가 산책을 하려합니다. 산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다. ["방향 거리", "방향 거리" … ] 예를 들어 "E 5"는 로봇 강아지가 현재 위치에서 동쪽으로 5칸 이동했다는 의미입니다. 로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인합니다. 주어진 ..
[백준] 1904번 01타일 [Python] - 피보나치 수열 00과 1로 N자리수 이진수를 만드는 경우의 수 구하는 문제 $($경우의수를 15746로 나눈 나머지 출력$)$ 더보기 문제 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다. 그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다. 예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다. $($01..
[백준] 1343번 폴리오미노 [Python] XXXX >>> AAAA XX > BB 위 방법으로 덮어쓴 문자열 출력하는 문제 더보기 문제 민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB 이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다. 출력 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. 1343번: 폴리오미노 (acmicpc.net) a=".".join(["AAAA"*(len(x)//4)+"B"*(len(x)%4) if len(x)%..
[백준] 2669번 직사각형 네 개의 합집합의 면적 구하기 [Python] - 도형 주어진 직사각형들이 차지하는 총 넓이 구하는 문제$($겹치는 구간 처리$)$ 더보기 문제 평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으며, 변이나 꼭짓점이 겹칠 수도 있다. 이 직사각형들이 차지하는 면적을 구하는 프로그램을 작성하시오. 2669번: 직사각형 네개의 합집합의 면적 구하기 (acmicpc.net) 100x100 크기의 판에 주어진 좌표 정보에 따라 직사각형이 차지하는 공간을 1로 아닌 공간을 0으로 채웠습니다. 한 직사각형의 가로가 x1 부터 x2 까지의 점을 가지고 있을 때 가로의 길이는 x2 - x1 - 1이라서 x1부터 x2-1까지를 그 직사각..
[백준] 1094번 막대기 [Python] - 이진법 64cm 막대기를 반으로 쪼개는 과정과 마지막에 이어 붙이는 과정만을 거쳐서 64보다 작거나 같은 Xcm의 막대기를 만드는 문제 마지막 이어 붙히는 과정에서 최소 막대기 갯수를 출력하면 됩니다. 더보기 문제 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다. 막대를 자르는 가장 쉬운 방법은 절반으로 자르는 것이다. 지민이는 아래와 같은 과정을 거쳐서 막대를 자르려고 한다. 지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다. 가지고 있는 막..
[프로그래머스] Lv.0 평행 [Python] 4개의 점 중에서 2개씩 이어서 평행이 되는지 확인하는 문제 더보기 문제 설명 점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다. [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] 주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요. 제한사항 dots의 길이 = 4 dots의 원소는 [x, y] 형태이며 x, y는 정수입니다. 0 ≤ x, y ≤ 100 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다. 두 직선이 겹치는 경우$($일치하는 경우$)$에도 1을 return 해주세요. 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지..
[프로그래머스] Lv.0 정수를 나선형으로 배치하기 [Python] 시계방향, 바깥에서 안으로 들어가는 나선 방향을 따라 숫자를 배치하는 문제 더보기 문제 설명 양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 $n^2$ 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요. 제한사항 1 ≤ n ≤ 30 nxn 행렬 생성 $($0,0$)$ 부터 조건에 따라 숫자를 배치하기 위해 초기값 $($0,0$)$ 설정 dr = $($0,1,0,-1$)$ : 0, 하, 0, 상 dc = $($1,0,-1,0$)$: 우, 0, 좌, 0 >>> 시계방향$($우, 하, 좌, 상$)$으로 이동 첫 바퀴는 각 방향마다 n-1 번씩 이동하면 한 바퀴를 돌아서 원자리로 돌아옵니다. 그래서 좌,하 방향으로..
[프로그래머스] Lv.0 옹알이[1] [Python] 발음 가능한 문자열만 사용해서 가능한 옹알이의 개수를 구하는 문제 발음 가능한 문자열 배열: ["aya", "ye", "woo", "ma"] $($각 문자열은 최대 1번 사용$)$ https://school.programmers.co.kr/learn/courses/30/lessons/120956 더보기 문제 설명 머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한$($이어 붙인$)$ 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ babbling의 길이 ..
[프로그래머스] Lv.3 택시 요금 [Python] [문제] 지점의 개수 n, 출발지점을 나타내는 s, A의 도착지점을 나타내는 a, B의 도착지점을 나타내는 b, 지점 사이의 예상 택시요금을 나타내는 fares가 매개변수로 주어집니다. 이때, A, B 두 사람이 s에서 출발해서 각각의 도착 지점까지 택시를 타고 간다고 가정할 때, 최저 예상 택시요금을 계산해서 return 하도록 solution 함수를 완성해 주세요. 만약, 아예 합승을 하지 않고 각자 이동하는 경우의 예상 택시요금이 더 낮다면, 합승을 하지 않아도 됩니다. https://school.programmers.co.kr/learn/courses/30/lessons/72413 더보기 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 밤늦게 귀가할 때 안전을 위해 ..