본문 바로가기

728x90

algorithm/백준알고리즘

[백준알고리즘] 9375번: 패션왕 신해빈 -Python [백준알고리즘] 9375번: 패션왕 신해빈 -Python https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 문제 해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까? 입력 첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다. 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 www.acmicpc.net 이 문제는 공식만 찾으면 바로 풀 수 있는 문제라고 생각한다. 처음에 무슨 .. 더보기
[백준알고리즘] 11051번: 이항계수 2 -C [백준알고리즘] 11051번: 이항계수 2 -C https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 이번 문제도 이전 문제와 같이 이항 계수문제이다. 하지만 범위가 훨씬 더 커졌기 때문에 아까와 같은 방식으로 하려고 하면 int의 범위를 넘어서 overflow를 일으킬 것이다. double의 경우는 해보지 않았지만 속도가 느릴 것이다. 하지만 여기서는 모듈러 연산(Modular Arithmetic: 나머지 연산)을 이용해서 int범위 안에서 돌아가도록 할 것이다. 문제를 주었을 때 10007로 나눈 나머지를 구하라고 .. 더보기
[백준알고리즘] 11050번: 이항계수 1 -C [백준알고리즘] 11050번: 이항계수 1 -C https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 이항 계수의 문지입니다. 이 문제는 범위가 짧기 때문에 이항 계수의 식을 그대로 넣어서 풀어주도록 합니다. nCk = n! / (k! * (n-k)!) 이때 저는 범위만큼 팩토리얼을 배열에 저장을 한 후 가져다가 쓰는 방식을 사용했습니다. #include int factorial_arr[11]; void factorial(void); int main(void){ int N, K; scanf("%d", &N); scanf("%.. 더보기
[백준알고리즘] 3036번: 링 -C [백준알고리즘] 3036번: 링 -C https://www.acmicpc.net/problem/3036 3036번: 링 문제 상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다. 링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, www.acmicpc.net 이 문제는 간단했습니다. 출력은 (첫번째 링의 반지름 / i번째 링의 반지름)을 약분해서 구하면 됩니다. .. 더보기
[백준알고리즘] 2981번: 검문 -Python [백준알고리즘] 2981번: 검문 -Python https://www.acmicpc.net/problem/2981 2981번: 검문 문제 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간을 때우기 위해서 수학 게임을 하기로 했다. 먼저 근처에 보이는 숫자 N개를 종이에 적는다. 그 다음, 종이에 적은 수를 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다. M은 1보다 커야 한다. N개의 수가 주어졌을 때, 가능한 M을 모두 찾는 www.acmicpc.net 이번 문제는 정답률이 21%인 난이도 높은 문제이다... 뭔가 감은 잡힌 것 같은데 식으로 만.. 더보기
[백준알고리즘] 2609번: 최대공약수와 최소공배수 -Python [백준알고리즘] 2609번: 최대공약수와 최소공배수 -Python https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 최대공약수(GCD : Greatest Common Divisor)와 최소공배수(LCM : Least Common Multiple)를 구하는 문제다. 이 문제는 유클리드 호제법을 알고 있으면 쉽게 풀 수 있는 문제이다. 유클리드 호제법은 GCD를 쉽게 구할 수 있는 알고리즘 중의 하나이다. 이 알고리즘은 식을 간결하게 해주는 특징이 있다. 두 수 a와 b (a > b)가 있다고 할 때, a와 b의 최대.. 더보기
[백준알고리즘] 11653번: 소인수분해 -Python [백준알고리즘] 11653번: 소인수분해 -Python https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 소인수 분해 문제이다. 그냥 인수만 구하라고 한다면 2부터 sqrt(N)까지 반복하면서 나누어 떨어지는지 확인을 하면서 리스트에 넣으면 된다. 여기서 적용한다면 for i in range(2, sqrt(N)+1) 일 것이다. 파이썬에서 sqrt()는 math 모듈을 import해야한다. 그런데 그냥 소인수들을 구하라고 했기 때문에 N을 직접 나눠가면서 print 하도록 했다. import sys N = int(sys.stdin.readline()) while N.. 더보기
[백준알고리즘] 1037번: 약수 -Python [백준알고리즘] 1037번: 약수 -Python https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다. www.acmicpc.net 수들이 주어지면 그 수들을 진짜 약수로 갖는 수 N을 구하는 문제이다. N을 구하는건 쉽다. 그저 약수 중 최솟값과 최댓값을 곱해주면 된다. 약수를 구할때를 생각해보면 된다. 코드는 아래와 같다. import sys N = int(sys.stdin.readline()) factors = list(map(int, sys.stdin.r.. 더보기

728x90