728x90

BOJ Code/Platinum 18

[백준/BOJ] platinum5 - 13560번 축구 게임 (Python)

▶13560 - 축구 게임 ▶문제 축구는 지구에서 가장 인기 있는 스포츠 중의 하나입니다. n 팀으로 이루어진 축구 리그가 있습니다. 하나의 팀은 다른 모든 팀과 정확히 한 번씩만 경기를 합니다. 그러므로, 각 팀은 n - 1번의 경기를 하게 됩니다. 무승부는 승부차기를 하기 때문에 없습니다. 한 경기 후에 이긴 한 팀은 1 점을 얻게 되고, 진 팀은 0 점을 얻게 됩니다. 베스트 팀 선정을 위해 경기 일정이 끝난 후에 각 팀은 리그 사무소에 획득한 점수를 보고하게 됩니다. 리그 사무소는 각 팀이 보고한 점수가 실수가 없는지 확실히 해두고 싶습니다. 즉, 보고한 점수가 유효한지 아닌지 알고 싶은 것이고, 이 말은 리그 룰에 따르는 경우 이 점수들을 각 팀에 할당하는 것이 가능해야 합니다. 주어진 n 개의..

BOJ Code/Platinum 2023.08.02

[백준/BOJ] platinum3 - 16930번 달리기 (Python)

▶16930 - 달리기 오랜만에 플래티넘 문제를 풀고 싶어서 쉬워 보이는 걸로 골랐다. 플래티넘3 문제지만 그렇게 어렵진 않았고, 플5 정도로 느껴졌다. ▶문제 진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1 × 1 크기의 칸으로 나누어져 있고, 칸은 빈칸 또는 벽이다. x행 y열에 있는 칸은 (x, y)로 나타낸다. 매 초마다 진영이는 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 하나 고르고, 그 방향으로 최소 1개, 최대 K개의 빈칸을 이동한다. 시작점 (x1, y1)과 도착점 (x2, y2)가 주어졌을 때, 시작점에서 도착점으로 이동하는 최소 시간을 구해보자. ▶입력 첫째 줄에 체육관의 크기 N과 M, 1초에 이동할 수 있는 칸의 최대 개수 K가 주어진다. 둘째 줄부..

BOJ Code/Platinum 2023.07.18

[백준/BOJ] platinum5 - 3197번 백조의 호수 (Python)

▶3197 - 백조의 호수 ▶문제 두 마리의 백조가 호수에서 살고 있었다. 그렇지만 두 마리는 호수를 덮고 있는 빙판으로 만나지 못한다. 호수는 행이 R개, 열이 C개인 직사각형 모양이다. 어떤 칸은 얼음으로 덮여있다. 호수는 차례로 녹는데, 매일 물 공간과 접촉한 모든 빙판 공간은 녹는다. 두 개의 공간이 접촉하려면 가로나 세로로 닿아 있는 것만 (대각선은 고려하지 않는다) 생각한다. 아래에는 세 가지 예가 있다. ...XXXXXX..XX.XXX ....XXXX.......XX .....XX.......... ....XXXXXXXXX.XXX .....XXXX..X..... ......X.......... ...XXXXXXXXXXXX.. ....XXX..XXXX.... .....X.....X..... ...

BOJ Code/Platinum 2023.05.07

[백준/BOJ] platinum5 - 8111번 0과 1 (Python)

▶8111 - 0과 1 ▶문제 폴란드 왕자 구사과는 다음과 같은 수를 좋아한다. 0과 1로만 이루어져 있어야 한다. 1이 적어도 하나 있어야 한다. 수의 길이가 100 이하이다. 수가 0으로 시작하지 않는다. 예를 들어, 101은 구사과가 좋아하는 수이다. 자연수 N이 주어졌을 때, N의 배수 중에서 구사과가 좋아하는 수를 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 테스트 케이스의 개수 T(T < 10)가 주어진다. 둘째 줄부터 T개의 줄에는 자연수 N이 한 줄에 하나씩 주어진다. N은 20,000보다 작거나 같은 자연수이다. ▶출력 각각의 테스트 케이스마다 N의 배수이면서, 구사과가 좋아하는 수를 아무거나 출력한다. 만약, 그러한 수가 없다면 BRAK을 출력한다. ▶풀이 1과 0이 들어가는 모든 ..

BOJ Code/Platinum 2023.03.01

[백준/BOJ] platinum5 - 11003번 최솟값 찾기 (Python)

▶11003 - 최솟값 찾기 ▶문제 N개의 수 A1, A2,..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. ▶입력 첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000) 둘째 줄에는 N개의 수 Ai가 주어진다. (-109 ≤ Ai ≤ 109) ▶출력 첫째 줄에 Di를 공백으로 구분하여 순서대로 출력한다. ▶풀이 deque를 이용해서 값을 구했다. 기존에 deque에 존재하는 값이 새로 들어오는 값보다 큰 경우에는 그냥 빼주었다. 그다음에 index와 그 arr값을 넣어주었다. 만약에 새로운 값이 들어왔는데 가장 앞에 있는 값과의 차이가 L..

BOJ Code/Platinum 2022.12.04

[백준/BOJ] platinum5 - 1517번 버블 소트 (Python)

▶1517 - 버블 소트 ▶문제 N개의 수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에 대해서 버블 소트를 수행할 때, Swap이 총 몇 번 발생하는지 알아내는 프로그램을 작성하시오. 버블 소트는 서로 인접해 있는 두 수를 바꿔가며 정렬하는 방법이다. 예를 들어 수열이 3 2 1이었다고 하자. 이 경우에는 인접해 있는 3, 2가 바뀌어야 하므로 2 3 1 이 된다. 다음으로는 3, 1이 바뀌어야 하므로 2 1 3 이 된다. 다음에는 2, 1이 바뀌어야 하므로 1 2 3 이 된다. 그러면 더 이상 바꿔야 할 경우가 없으므로 정렬이 완료된다. ▶입력 첫째 줄에 N(1 ≤ N ≤ 500,000)이 주어진다. 다음 줄에는 N개의 정수로 A[1], A[2], …, A[N]이 주어진다. ..

BOJ Code/Platinum 2022.11.28

[백준/BOJ] platinum5 - 11402번 이항 계수 4 (Python)

▶11402 - 이항 계수 4 ▶문제 자연수 n과 정수 k가 주어졌을 때 이항 계수 nCk를 m으로 나눈 나머지를 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 n, k와 m이 주어진다. (1 ≤ n ≤ 10^18, 0 ≤ k ≤ n, 2 ≤ m ≤ 2,000, m은 소수) ▶출력 nCk를 m으로 나눈 나머지를 출력한다. ▶예제 ▶풀이 dp문제라고 해서 풀었는데 왜 dp인지는 잘 모르겠다. 이것도 dp에 포함되는 문제인가 보다. 아님 내가 dp를 쓰지 않고 풀었나 보다. 아무튼 어떻게 풀지 고민하면서 구글에 검색을 해보았는데 이항 계수를 구해서 m으로 나누는 문제는 '뤼카의 정리'를 사용하면 된다고 보았다. 그래서 뤼카의 정리가 뭔지 찾아보았다. https://ko.wikipedia.org/wiki/%..

BOJ Code/Platinum 2022.06.25

[백준/BOJ] platinum5 - 1328번 고층 빌딩 (Python)

▶1328 - 고층 빌딩 ▶문제 상근이가 살고 있는 동네에는 빌딩 N개가 한 줄로 세워져 있다. 모든 빌딩의 높이는 1보다 크거나 같고, N보다 작거나 같으며, 같은 높이를 가지는 빌딩은 없다. 상근이는 학교 가는 길에 가장 왼쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았고, 집에 돌아오는 길에는 가장 오른쪽에 서서 빌딩을 몇 개 볼 수 있는지 보았다. 상근이는 가장 왼쪽과 오른쪽에서만 빌딩을 봤기 때문에, 빌딩이 어떤 순서로 위치해있는지는 알 수가 없다. 빌딩의 개수 N과 가장 왼쪽에서 봤을 때 보이는 빌딩의 수 L, 가장 오른쪽에서 봤을 때 보이는 빌딩의 수 R이 주어졌을 때, 가능한 빌딩 순서의 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어, N = 5, L = 3, R = 2인 경우에 가능한..

BOJ Code/Platinum 2022.06.23

[백준/BOJ] platinum4 - 17106번 빙고 (Text)

▶17106 - 빙고 ▶문제 최근에 구더기 컵 공식 트위터 계정은 구더기 컵 빙고를 공개했다. 원본 트윗은 이 링크에서 볼 수 있다. 마침 이번 대회의 첫 문제이므로 간단한 몸 풀기를 해 보자. 빙고판을 하나 주면 답안을 작성해서 제출하기만 하면 되는 간단한 문제다. 위에 있는 빙고판 말고 새로운 빙고판을 줄 예정이다. 시작하기 전에, 몇 가지 내용을 덧붙이고자 한다. 문제를 이해하기 쉽게 하기 위해 각 칸에 번호를 붙여 놓았다. 열 번호는 왼쪽에서 오른쪽으로 A, B, C, D, E이고, 행 번호는 위에서 아래로 1, 2, 3, 4, 5이다. 칸의 번호는 열 번호와 행 번호를 이어 붙여서 만들어진다. 예를 들어 위 빙고판의 "Is it rated?"가 적힌 칸의 번호는 C5이다. 빙고를 하려면 각 칸에..

BOJ Code/Platinum 2022.06.16

[백준/BOJ] platinum4 - 1854번 K번째 최단경로 찾기 (Python)

▶1854 - K번째 최단경로 찾기 ▶문제 봄 캠프를 마친 김진영 조교는 여러 도시를 돌며 여행을 다닐 계획이다. 그런데 김 조교는, '느림의 미학'을 중요시하는 사람이라 항상 최단경로로만 이동하는 것은 별로 좋아하지 않는다. 하지만 너무 시간이 오래 걸리는 경로도 그리 매력적인 것만은 아니어서, 적당한 타협안인 'k번째 최단경로'를 구하길 원한다. 그를 돕기 위한 프로그램을 작성해 보자. ▶입력 첫째 줄에 n, m, k가 주어진다. (1 ≤ n ≤ 1000, 0 ≤ m ≤ 2000000, 1 ≤ k ≤ 100) n과 m은 각각 김 조교가 여행을 고려하고 있는 도시들의 개수와, 도시 간에 존재하는 도로의 수이다. 이어지는 m개의 줄에는 각각 도로의 정보를 제공하는 세 개의 정수 a, b, c가 포함되어 ..

BOJ Code/Platinum 2022.06.15

[백준/BOJ] platinum5 - 2887번 행성 터널 (Python)

▶2887 - 행성 터널 ▶문제 때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다. 행성은 3차원 좌표 위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와 B(xB, yB, zB)를 터널로 연결할 때 드는 비용은 min(|xA-xB|, |yA-yB|, |zA-zB|)이다. 민혁이는 터널을 총 N-1개 건설해서 모든 행성이 서로 연결되게 하려고 한다. 이때, 모든 행성을 터널로 연결하는데 필요한 최소 비용을 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌..

BOJ Code/Platinum 2022.06.14

[백준/BOJ] platinum5 - 10217번 KCM Travel (Python)

▶10217 - KCM Travel ▶문제 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세에 힘입어 구글 역시 대기업답게 비용 감축에 열을 내고 있었던 것이다. 초대장 내용에 의하면 구글은 찬민에게 최대 M원까지의 비용만을 여행비로써 부담해주겠다고 한다. 인천에서 LA행 직항 한 번 끊어주는 게 그렇게 힘드냐고 따지고도 싶었지만, 다가올 결승 대회를 생각하면 대회 외적인 곳에 마음을 쓰고 싶지 않은 것 또한 사실이었다. 그래서 찬민은 인천에서 LA까지 M원 이하로 사용하면서 도착할 수 있는 가장 빠른 길을 차선책으로 택하기로 하였다. ..

BOJ Code/Platinum 2022.06.13

[백준/BOJ] platinum4 - 6086번 최대 유량 (Python)

▶6086 - 최대 유량 ▶문제 농사꾼 존은 소들이 충분한 물을 마시길 원했다. 그래서 농장에서 우물에서 외양간을 잇는 N개의 배수관의 지도를 만들기로 했다. 존은 아주 다양한 크기의 배수관들이 완전히 우연한 방법으로 연결돼있음을 알았다. 존은 파이프를 통과하는 유량을 계산하고 싶다. 두 개의 배수관이 한 줄로 연결돼 있을 때 두 관의 유량 중 최솟값으로 흐르게 된다. 예를 들어 용량이 5인 파이프가 용량이 3인 파이프와 연결되면 한 개의 용량 3짜리 파이프가 된다. +---5---+---3---+ -> +---3---+ 게다가, 병렬로 연결돼 있는 배수관들은 각 용량의 합만큼의 물을 보낼 수 있다. +---5---+ ---+ +--- -> +---8---+ +---3---+ 마지막으로, 어떤 것에도 연..

BOJ Code/Platinum 2022.06.09

[백준/BOJ] platinum4 - 1305번 광고 (Python)

▶1305 - 광고 ▶문제 세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광판에는 같은 내용의 문구가 무한히 반복되어 나온다. 또, 전광판의 크기는 전광판에서 한 번에 보이는 최대 문자수를 나타낸다. 만약 전광판의 크기가 L이라면, 한 번에 L개의 문자를 표시할 수 있는 것이다. 광고업자는 최대한의 광고효과를 내기 위해서 길이가 N인 광고를 무한히 붙여서 광고한다. 예를 들어, 광고 업자 백은진이 광고하고 싶은 내용이 aaba 이고, 전광판의 크기가 6이라면 맨 처음에 보이는 내용은 aabaaa이다. 시간이 1초가 지날 때마다, 문자는 한 칸씩 옆으로 이동한다. 따라서 처음..

BOJ Code/Platinum 2022.04.12

[백준/BOJ] platinum5 - 6549번 히스토그램에서 가장 큰 직사각형 (Python)

▶6549 - 히스토그램에서 가장 큰 직사각형 ▶문제 히스토그램은 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형이다. 각 직사각형은 같은 너비를 가지고 있지만, 높이는 서로 다를 수도 있다. 예를 들어, 왼쪽 그림은 높이가 2, 1, 4, 5, 1, 3, 3이고 너비가 1인 직사각형으로 이루어진 히스토그램이다. 히스토그램에서 가장 넓이가 큰 직사각형을 구하는 프로그램을 작성하시오. ▶입력 입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ 1,000,000,000)가 주어진다. 이 숫자들은 히스토그램에 있는 직사각형의 높이이며..

BOJ Code/Platinum 2022.04.11

[백준/BOJ] platinum5 - 14003번 가장 긴 증가하는 부분 수열5 (Python)

▶14003 - 가장 긴 증가하는 부분 수열 ▶문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. ▶입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) ▶출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 둘째 줄에는 정답이 될 수 있는 가장 긴 증가하는 부분 수열을 출력한다. ▶풀이 두번정도 틀렸다. 런타임..

BOJ Code/Platinum 2022.04.10

[백준/BOJ] platinum5 - 4354번 문자열 제곱 (Python)

▶4354 - 문자열 제곱 ▶문제 알파벳 소문자로 이루어진 두 문자열 a와 b가 주어졌을 때, a*b는 두 문자열을 이어붙이는 것을 뜻한다. 예를 들어, a="abc", b="def"일 때, a*b="abcdef"이다. 이러한 이어 붙이는 것을 곱셈으로 생각한다면, 음이 아닌 정수의 제곱도 정의할 수 있다. a^0 = "" (빈 문자열) a^(n+1) = a*(a^n) 문자열 s가 주어졌을 때, 어떤 문자열 a에 대해서 s=a^n을 만족하는 가장 큰 n을 찾는 프로그램을 작성하시오. ▶입력 입력은 10개 이하의 테스트 케이스로 이루어져 있다. 각각의 테스트 케이스는 s를 포함한 한 줄로 이루어져 있다. s의 길이는 적어도 1이며, 백만글자를 넘지 않는다. 마지막 테스트 케이스의 다음 줄은 마침표이다. ▶..

BOJ Code/Platinum 2022.04.08

[백준/BOJ] platinum2 - 2261번 가장 가까운 두 점 (Python)

▶2261 - 가장 가까운 두 점 ▶문제 2차원 평면상에 n개의 점이 주어졌을 때, 이 점들 중 가장 가까운 두 점을 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 자연수 n(2 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 차례로 각 점의 x, y좌표가 주어진다. 각각의 좌표는 절댓값이 10,000을 넘지 않는 정수이다. 여러 점이 같은 좌표를 가질 수도 있다. ▶출력 첫째 줄에 가장 가까운 두 점의 거리의 제곱을 출력한다. ▶풀이 알고리즘1 수업을 듣는데 이 문제가 나왔다. 어떻게 푸나 힌트를 찾아보는데 플래티넘2 문제ㅜ 나는 아직 플래티넘4까지만 풀어봤는데ㅜ 과제도 하고 플레2 문제도 풀겸 문제를 풀어봤다. 내 실력으로 다 풀지는 못했고, 힌트를 찾아보면서 풀었다. 과제에서는 nlog..

BOJ Code/Platinum 2022.04.04
728x90