본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/수학

(16)
[백준 / BOJ] 1242 소풍 (Java) 문제 출처 : https://www.acmicpc.net/problem/1242 1242번: 소풍 첫째 줄에 N, K, M가 주어진다. N과 K는 5,000,000보다 작거나 같은 자연수이고, M은 N보다 작거나 같다. www.acmicpc.net 소풍을간 사람의 수 N 제거될 사람의 번호 K 동호의 번호 M 이 주어진다. 사람들이 원형으로 둘러앉아 순서대로 번호를 외칠때, K를 외친사람이 탈락하고, 이후 남은사람들끼리 다시 게임을 시작한다. 동호는 자신이 몇번째에 탈락할지 궁금하다. 동호가 몇번째에 탈락하는지 구하는 프로그램을 만들자. 풀이 어려웠던 문제다. 처음에는 현재 제거될 사람의 위치를 구하기위해 유니온파인드를 사용해서 경로를 압축해줄려했다. 예를들어, 1 2 3 4 5에서 2번, 3번이 이미 ..
[백준 / BOJ] 1393 음하철도 구구팔 (Java) 문제 출처 : https://www.acmicpc.net/problem/1393 1393번: 음하철도 구구팔 첫번째 줄에는 xs와 ys가 주어진다. 이는 정류장의 위치가 (xs, ys)임을 의미한다. 두번째 줄에는 xe, ye, dx, dy가 주어진다. 이는 현재 열차 위치가 (xe, ye)이고, 열차가 1초마다 x가 증가하는 방향으로 www.acmicpc.net 최백준은 자신이 탄 음하철도 구구팔이 정류장과 가장 근접했을때 뛰어내릴려고한다. 자신이 탄 철도의 위치와, 이동방향, 정류장의 위치가 주어질때, 최백준이 뛰어내리는 위치를 구하는 문제다. 풀이 "뛰어내릴 위치의 좌표가 항상 정수인 입력만 주어진다." 조건때문에, 완전탐색으로 풀수있는 문제였다. 이게없었으면 이동하는 소수점단위까지 계산해야하므로,..
[백준 / BOJ] 1256 사전 문제 출처 : www.acmicpc.net/problem/1256 1256번: 사전 첫째 줄에 N, M, K가 순서대로 주어진다. N과 M은 100보다 작거나 같은 자연수이고, K는 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net "a","z"로만 이루어진 문자열이 수록된 사전이있다. 사전에 있는 문자열은 모두 알파벳 순서로 정렬되어있다. "a"의 갯수 N, "z"의 갯수 M이 주어질때, K번째 문자열이 무엇인지 찾는 문제다. 풀이 수학 문제였다. N과 M이 각각 100까지 갈수있기때문에. 완전탐색으로 모든 가지를 만들며 풀경우 약 10^60번 반복하며 시간안에 절대 풀지못한다. 조합을 이용해 찾고자하는 칸 만큼 건너뛰면서 K번째 문자열을 찾아야했다. 아이디어는 다음과 ..
[백준 / BOJ] 17087 숨바꼭질 6 문제 출처 : www.acmicpc.net/problem/17087 17087번: 숨바꼭질 6 수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이 www.acmicpc.net 수빈이가 동생'들'과 숨바꼭질을한다. 선영이는 +D, -D만큼 이동할수있다. 선영이의 위치와 동생들의 위치가 주어졌을때, 선영이가 모든 동생을 찾을수있는 최대 D값을 찾는문제다. 풀이 수학문제다. 선영이는 모든 동생을 찾아야한다. 선영이는 항상 +D, -D만큼 움직일수있으므로, 모든 동생과의 거리차들의 최대공약수만큼 움직여야 모든동생들을 찾을수있다. 1. 선영이의 ..
[백준 / BOJ] 1629 곱셈 문제 출처 : www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net a를 b제곱한 수에 c를 나눈 나머지를 구하는 문제다. 풀이 B의 최댓값이 21억이므로 반복문으로 제곱을 해주면 총 21억번 반복을 하게되어서 시간초과가 난다. 분할정복과 수학공식을 이용해서 시간을 최소화해 구해야하는 문제였다. a의 b제곱 = a의 b/2제곱 * a의 b/2제곱 을 사용한다. 단, 지수가 홀수일때는 a의 b제곱 = a의 b/2제곱 * a의 b/2제곱 * a를 해주는것에 유의해야한다. 이해를 돕기위해 위 그림을 보자. 2^8을 계속해서 공식을 사..
[백준 / BOJ] 1241 머리 톡톡 문제 출처 : www.acmicpc.net/problem/1241 1241번: 머리 톡톡 엄지 생일 기념으로 학생들은 파티를 하고 있다. 엄지는 N(1≤N≤100,000)명의 학생에게 1부터 N번까지 차례대로 번호를 부여하였고 그들을 순서대로 빙 둘러앉아 원을 만들게 하였다. (즉 i번째 학� www.acmicpc.net N명의 학생이 원형으로 앉아있다. 1번 학생부터 N번 학생까지 순서대로 일어나면서 자신이 쓴 숫자가 다른사람의 숫자의 배수라면 머리를 한대친다. 이때 각학생이 머리를 총 몇번치는지 구하는 문제이다. 풀이 완전탐색으로 풀게되면 100001 * 50000이라 시간초과가 난다. arr배열을 만들어 해당 숫자가 나온 횟수를 저장해주고, 약수가 되는 값의 범위를 찾아 풀었다. i번 학생이 머리에..
[백준 / BOJ] 1105 팔 문제 출처 : www.acmicpc.net/problem/1105 1105번: 팔 첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net L과 R을 입력받았을때, L보다 크거나 같고, R보다 작거나 같은수중 8이 최소한으로 들어가는수를 찾으면된다. 풀이 R의 최댓값이 20억이라 완전탐색으로 찾을려하면 시간초과가 난다. 8의 개수를 찾아야 하는것 이므로 L과 R의 자릿수가 같다면, 앞에서 부터 탐색하며 L과 R의 해당 자릿수가 8로 같을때를 찾아주면된다. 예제의 경우 8808 8880 은 천의자리수와 백의자리수가 모두 8로 같아서 최소한으로 나올수있는 8의 갯수는..
[백준 / BOJ] 14650 걷다보니 신천역 삼 (small) 문제 출처 : www.acmicpc.net/problem/14650 14650번: 걷다보니 신천역 삼 (Small) 욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 금강삼도 식후경, 걷다보니 신천역 삼, 그리고 특히 일�� www.acmicpc.net N을 입력받았을때, 0 , 1 , 2만을 가지고 N자리 3의 배수를 만들어야한다. N = 1 이라면 0 , 1 , 2 로 만들수있는 3의 배수가 없으니 0 출력 N = 2 라면 1 2 2 1 두가지를 만들수있다. (현재 숫자에 더하는게 아니라 숫자를 이어붙이는 형식임에 주의하자) 풀이 완전 탐색 문제다. 3의 배수가 갖는 규칙을 찾는게 중요했는데, 3의 배수라..