https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 조합 문제를 dp로 풀어보았다. 규칙을 찾기 어려워서 일단 계산한 결과를 적어보았다. 행은 n을, 열은 k를 의미할 때 5C2(nCk)를 구하자고 해보자. 0 1 2 3 0 1 0 0 0 1 1 1 0 0 2 1 2 1 0 3 1 3 3 1 4 1 4 6 4 5 1 5 10 10 k가 n보다 큰 경우는 0을 넣어 계산에 영향을 미치도록 하지 않았다. 5C2의 값은 10이다. 그런데 위의 4C1 + 4C2의 값과 동일하다. 이는 우연이 아니다. 4C1은 3C0 + 3C..
https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 1년만에 풀어보는 TSP 문제였다... 풀어본 문제임에도 오랜만에 푸니까 가물가물했다.. ㅜ 처음 작성했던 코드는 두 가지 오류가 존재했다. # 외판원 순회 2 import sys input = sys.stdin.readline N = int(input()) w = [] visited = [False for _ in range(N)] answer = 1..
https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 이 문제를 풀 때 가장 중요한 점은 '우선순위 큐'를 사용한다는 것이다. 그리고 파이썬에는 heapq 모듈에 구현되어 있다. 우선 카드의 수를 입력받은 리스트 A를 힙으로 바꾼다. 그리고 우선순위 큐는 우선순위가 낮은 값부터 pop하기 때문에 최솟값을 쉽게 구할 수 있다. 따라서 두 번의 pop을 통해 최솟값을 꺼내고 그 둘을 더한 뒤 다시 우선순위 큐에 넣는다. 이 과정을 진행하면..

https://www.acmicpc.net/problem/1057 1057번: 토너먼트 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 www.acmicpc.net 문제는 되게 간단하게 풀었다. 몇번째 라운드에서 만나는지만 계산하면 되기 때문에 한 라운드에서 A, B의 번호가 어디인지 찾았다. 사용한 수식은 위의 과정을 통해 알아냈다. # 토너먼트 import sys input = sys.stdin.readline N, A, B = map(int, input().split()) answer = 0 while True: if A == B: print(answer) b..
https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 리스트 A에 인덱스 접근을 할 때 연속되어야 하기 때문에 for 반복문으로 bruteforce로 해결하였다. 찾아보니 투 포인터를 사용한 해결 방법도 있었다. (https://jennnn.tistory.com/64) 다양한 해결방법을 아는 것은 문제를 해결하는 시야를 넓혀주기 때문에 문제 접근 방법을 더 생각할 필요가 있는 것 같다 :) # 수들의 합 2 ..
https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 간단한 수학문제다. # 링 import sys, math input = sys.stdin.readline N = int(input()) R = list(map(int, input().split())) for i in range(1, N): value = math.gcd(R[0], R[i]) print(R[0]//value, '/', R[i]//value, sep='')
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 요즘 자료구조 문제를 많이 푸는 것 같다. 이 문제는 회전하는 큐를 덱으로 구현하는 문제이다. idx라는 변수를 두어 answer에 넣어야 하는 수가 무엇인지 검사하였다. (입력의 num 배열로) 만약 아니라면, 1번 연산을 다시 되돌리고 찾고자 하는 수의 위치를 찾는다. 인덱스가 앞쪽이면 2번 연산을, 뒤쪽이면 3번 연산을 수행한다. 이때 인덱스 비교를 할 때 // 대신 / 를 써야 한다. ..
https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 리스트로 하면 무조건 시간 초과가 날 것 같았다. 따라서 딕셔너리를 사용하여 해당 카드의 수가 몇 번 나왔는지 value로 저장하였다. 즉, card라는 list에서 10이 3번 나왔으면 {10 : 3} 이렇게 저장되는 것이다. 그리고 만약에 find_number에 일치하는 키가 있다면 값을 출력해주면 되고 만약 없다면 0을 출력한다. 딕셔너리에서 in 연산은 시..
- Total
- Today
- Yesterday
- 러스트
- 10816
- 11051
- 자료구조
- 1715
- 큐
- 삼성청년소프트웨어아카데미
- 10971
- 10815
- heapq
- 백트래킹
- 10845
- 1759
- 17478
- 빌림
- 브루트포스
- 조합
- 싸피
- 1358
- 딕셔너리
- 파이썬
- 2805
- 스택
- 수학
- dp
- 1182
- 백준
- 프로그래머스
- 1764
- 덱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |