본문 바로가기

728x90

백준

(129)
[백준] 2231번 분해합 [Python] 주어진 N에 대한 생성자 찾기 어떤 수의 분해합은 어떤 수와 그 수의 모든 자리수와 합이고, 어떤 수는 그 분해합의 생성자이다. 더보기 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256$(=245+2+4+5)$이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N$(1 ≤ N ≤ 1,000,000)$이 주어진다. 출력 첫째 줄에 답을..
[백준] 21316번 스피카 [Python] - 그래프이론 별이 번호로 주어지고, 이어진 별의 정보가 주어졌을 때, 스피카를 찾는 문제 더보기 문제 위 그림은 처녀자리 중 12개의 별을 12개의 선분으로 이어 만든 그림이다. 시은이는 임의로 각 별에 1부터 12까지의 서로 다른 정수 번호를 부여하고, 12개의 정수 쌍으로 각 선분이 어떤 두 별을 잇는지 기록하였다. 하지만 어떤 별에 어떤 번호를 부여했는지 잊어버렸다고 한다. 선분들의 정보가 주어질 때, 가장 밝은 별인 Spica가 몇 번 별이였는지 알려주자. 입력 입력은 12개의 줄로 주어진다. 각 줄에는 서로 다른 두 개의 정수 x, y가 주어지며, 두 별 x와 y를 잇는 선분이 있음을 의미한다. 반드시 그림과 같은 모습임이 보장된다. 출력 입력으로 주어진 그래프에서 Spica는 몇 번 별인지 출력하여라. 번..
[백준] 26265번 멘토와 멘티 [Python] - 정렬 멘토와 멘티 이름을 전달 받으면 멘토 이름은 사전 순서대로 멘토 이름이 같으면 멘티 이름은 역순으로 정렬 하는 문제 더보기 문제 서울사이버대학교에는 멘토링 프로그램이 있다. 멘토링 프로그램은 한 명의 멘토$($선배학습자$)$가 여러 명의 멘티$($후배학습자$)$에게 대학 생활에 대한 노하우와 정보 등을 전수하는 것이다. 빅데이터·AI 센터에서 딥러닝 서버를 돌리며 바쁜 나날을 보내던 노교수는, 어느 날 멘토링 회의 참석 요청이 들어와 이를 준비하던 도중 멘토-멘티 순서쌍 목록이 적힌 노트를 찾았다. 하지만 노트가 제대로 정리되어 있지 않아 분석이 어려웠으므로, 마침 센터에서 인턴을 하는 대학원생 뚜루에게 목록의 정렬을 맡기기로 했다. 하지만 논문을 쓰느라 수면 부족에 시달리고 있는 뚜루는 이러한 프로그램..
[백준] 20114번 미아 노트 [Python] 주어진 N,H,W와 옆으로, 위 아래로 번진 단어를 통해 원래 단어를 찾는 문제 N : 원래 단어의 길이 H=2 일 때, abc -> abc abc W=3 일 때, abc -> aaabbbccc 더보기 문제 미아는 과일을 좋아하는 소녀이다. 그녀의 비밀 노트에는 과일에 대해 그녀가 수집한 정보들이 가득하다. 평소와 다를 바 없이 과일들을 잔뜩 관찰하고 기쁜 마음으로 하교하던 어느 날, 친구가 뒤에서 덮치는 바람에 실수로 비밀 노트를 물에 빠뜨리고 말았다. 다행히 노트는 건질 수 있었지만, 노트에 적어두었던 정보들이 번지고 지워져버려 일부는 알아볼 수 없게 되었다. 노트에 적힌 문자열이 번진 패턴은 일정했는데, 가령 "abc" 문자가 세로로 3글자씩, 가로로 2글자씩 번진 경우는 다음과 같았다. aabbc..
[백준] 9575번 행운의 수 [Python] 주어진 세개의 수열의 원소들의 조합으로 합을 냈을 때 5나 8로만 이루어진 숫자를 만들 때, 그 숫자의 개수를 구하는 문제 더보기 문제 한슬이는 5와 8이 행운의 수라고 생각한다. 그래서 한슬이는 각 자리가 5와 8로만 이뤄져 있는 수를 행운의 수라고 한다. 정수 수열 A, B, C가 주어졌을 때 세 수열에서 각각 하나의 정수를 골라서 만들 수 있는 서로 다른 행운의 수의 개수를 구해보자. 예를 들어 A = [1, 10, 100], B = [3, 53], C = [4, 54]라고 한다면, 행운의 수를 만드는 방법은 8 = 1 + 3 + 4, 58 = 1 + 3 + 54, 58 = 1 + 53 + 4와 같이 총 3가지가 있다. 58은 2가지 방법으로 만들 수 있으니, 서로 다른 행운의 수의 개수는 8과 5..
[백준] 17176번 암호해독기 [Python] - 아스키코드 0은 띄어쓰기, 1 - 26 범위 안의 수는 A ~ Z, 27 - 52 범위 안의 수는 a ~ z로 해석 평문을 암호화해서 주어진 암호문을 만들 수 있는지 확인하는 문제 더보기 문제 방금 도착한 암호문을 해독했는데, 해독에 오류가 없는지 확인해보려 한다. 해독한 문장이 암호문을 해석한 결과로 나올 수 없다면, 그 해독은 잘못된 것이다. 암호문은 0 이상 52 이하의 정수로 이루어져 있다. 0은 띄어쓰기, 1 - 26 범위 안의 수는 A ~ Z, 27 - 52 범위 안의 수는 a ~ z로 해석된다. 암호문은 띄어쓰기를 포함한 모든 철자를 이와 같이 정수로 치환한 후 순서를 무작위로 뒤섞어서 만들어졌다. 입력 첫 번째 줄에는 주어질 수열의 길이 N이 주어진다. $(1 ≤ N ≤ 100,000)$ 두 번째 줄..
[백준] 12981번 공 포장하기 [Python] - 그리디 세가지 색깔의 공이 있고, 공을 담는 최소 박스 개수 구하는 문제 1 박스에 공은 1,2 또는 3개를 넣을 수 있습니다. 모두 같은 색으로 넣거나 모두 다른 색으로 넣어야 합니다. 더보기 문제 빨간 공 R개, 초록 공 G개, 파란 공 B개를 가지고 있다. 오늘은 이 공을 박스로 포장하려고 한다. 박스에는 공이 1개, 2개, 또는 3개 들어갈 수 있다. 박스에 들어가는 공의 색은 모두 다르거나, 모두 같아야 한다. 필요한 박스 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 R, G, B가 주어진다. $(1 ≤ R, G, B ≤ 100)$ 출력 첫째 줄에 필요한 박스 개수의 최솟값을 출력한다. 12981번: 공 포장하기 $($acmicpc.net$)$ 모두 같은 색으로 3개씩 $($3으로 나..
[백준] 22993번 서든 어택 3 [Python] - 그리디 공격력이 강한 사람이 약한 사람과 전투를 치르면 이기면서 상대방의 공격력을 갖는다. $($지면 끝, 동점은 아무 일도 일어나지 않음$)$ 전투 순서가 운이 좋아서 이길 수 있다면 Yes, 어떠한 경우에도 이길 수 없다면 No를 출력하는 문제 더보기 문제 지스타를 준비하기 시작한 작년 여름 이후 CBT와 런칭 준비를 한 오늘까지. 평일 저녁에 가족이 깨어 있는 것을 거의 본 적이 없다. 이제 본격적인 정식오픈을 이틀 앞 둔 오늘. 바람소리와 스산한 빗소리가 사무실 창밖을 때린다. 폭풍전야. 블라인드에서 서든3을 비웃던, 지금도 비웃는 이들에게 반박글을 달지 않았다. 니들이 허접한지, 우리가 허접한지는 결과가 말해줄 것이다. 넥슨의 게임 개발자 준원이는 서든어택 3의 출시를 앞두고 게임 테스트를 하고 있다...
[백준] 17451번 평행 우주 [Python] - 그리디 이동할 행성마다 빠져나가기 위해 요구하는 최소 속도가 있다. 출발하면 속도를 유지하거나 늦추기만 가능하며, 최소 속도의 정수배일 때만 그 행성을 지나갈 수 있다. 모든 행성을 지나가기 위한 최소 출발 속도를 구하는 문제 더보기 문제 서기 2XXX년, 지구가 소행성과 충돌할 위기에 처했다! 똑똑한 과학자 키파는 평행 우주를 누비며 지구를 대신할 행성을 찾는 막중한 임무를 맡게 되었다. 우리는 현재 지구$($=행성 0$)$에 있다. 여러 요인을 고려한 결과, 행성 1, 행성 2, …, 행성 $($n-1$)$을 순서대로 확인하고 지구$($=행성 n$)$에 돌아오는 것이 비용상 최적임을 알아냈다. 모든 정수 1 ≤ i
[백준] 25706번 자전거 묘기 [Python] - 다이나믹 자전거를 타고 점프대를 지나면 그 높이만큼 칸을 건너 뛴다. 1번칸부터 N번칸 까지 자전거를 타고 출발할 때, 지나가게 되는 칸의 수를 구하는 문제 더보기 문제 길이가 N미터인 직선 자전거 도로가 있다. 도로는 길이가 1미터인 N개의 칸으로 구분되어 있고, 가장 왼쪽에 있는 칸부터 순서대로 1번 칸, 2번 칸, …, N번 칸이다. 도로의 각 칸에는 점프대가 설치되어 있을 수 있다. i$($1 ≤ i ≤ N$)$번 칸에 설치된 점프대의 높이를 hi라고 하자. 높이가 hi인 점프대를 밟으면 그 어떤 요인과도 관계없이 다음 hi칸 위를 비행한 뒤 그다음 칸에 착지한다. 다음 예시를 확인해 보자. 자전거를 타고 1번 칸에서 출발해 앞으로 달리면 다음과 같은 일들이 순서대로 일어난다. 1번 칸에 점프대가 없으므로..
[백준] 14717번 앉았다 [Python] 1~10 숫자 카드 2벌, 총 20장의 카드 2장 중복 없이 뽑아서 같은 수면 땡, 다른 수면 끗 $($땡이 끗보다 더 강하다$)$ 땡은 그 숫자 크기끼리 비교해서 큰 수가 더 강하고, 끗은 두 수의 합의 일의 자리 숫자가 크면 더 강하다. 내가 뽑은 숫자 두 장을 보고, 상대방의 카드는 모를 때, 내가 이길 확률을 구하는 문제 더보기 문제 섰다는 화투를 이용하여 20장의 카드를 가지고 2명 이상이 경기를 하는 게임이다. 이러한 섰다의 규칙을 단순화한 게임이 바로 '앉았다'이다. 앉았다의 규칙은 1, 2, 3, ... , 9, 10이 쓰인 카드가 각 2장씩 주어지며 총 20장의 카드가 사용되며, 2명이 참가한다. 다음은 앉았다의 경기 방법이다. 두 명의 참가자는 순서대로 20장의 카드 중 무작위로 2장의..
[백준] 1347번 미로 만들기 [Python] - 정렬 주어진 좌,우,직진 정보만으로 미로를 그리는 문제 지나간 길을 '.'로 표현하고, 벽은 그 길을 포함하는 가장 작은 직사각형만으로 '#'로 채우기 더보기 문제 홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다. 입력으로 홍준이가 적은 내용을 나타내는 문자열이 주어진다. 각 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오..