Koala - 15기

문제 & 링크https://www.acmicpc.net/problem/1002 풀이1. x1, y1을 중심으로 하고 반지름이 r1인 원과 x2, y2를 중심으로 하고 반지름이 r2인 원의 접점을 구하는 문제이다.2. 두 원의 중심 좌표가 같을 경우 반지름의 길이가 같다면 접점은 무한대가 되고, 다르다면 접점은 없게 된다.3. 두 원의 중심 좌표가 다를 경우 접점이 두 개, 한 개, 없는 경우로 나뉜다.3-1. 접점이 두 개인 경우는 중심 좌표 간의 거리가 각 원의 반지름의 합보다는 짧고, 반지름의 차보다는 긴 경우이다.3-2. 접점이 한 개인 경우는 중심 좌표 간의 거리가 각 원의 반지름의 합과 같거나 반지름의 차와 같은 경우이다.3-3. 접점이 없는 경우는 그 외의 경우이다. 참고 자료빨간색 선: r1..
문제 & 링크https://www.acmicpc.net/problem/17608 풀이1. 보는 방향, 즉 제일 오른쪽 막대기를 시작으로 잡는다.2. 오른쪽에서 왼쪽으로 막대기를 탐색하며 지금까지 탐색한 막대기 중 가장 큰 것과 비교한다. (max값 구하는 알고리즘과 유사)3. 더 큰 막대기가 있을 경우 count 변수를 증가시키고 가장 큰 막대기를 업데이트한다.4. 2 - 3의 과정을 제일 왼쪽 막대기를 탐색할 때 까지 반복하고 최종 count를 출력한다. 코드#include #include using namespace std;int main() { int N, h; cin >> N; vector high(N); for (int i = 0; i > h; ..
https://www.acmicpc.net/problem/13410문제문제풀이거꾸로 구구단은 구구단의 결과를 뒤에서부터 읽으며 된다. 예를 들어8*1 = 8 -> 88*2 = 16 -> 618*3 = 24  -> 42반복문을 통해서 N과 1부터 K까지의 수를 곱한 각각의 결과들을 문자열로 만들어서 거꾸로 출력한 후 그 값을 숫자로 변환하여 numbers리스트에 저장한다. sorted() 함수를 통하여 numbers리스트의 원소들을 내림차순으로 정리한 후 가장 큰 원소인 numbers[0]을 출력한다.소스코드N, K = map(int, input().split())numbers = []for i in range(1, K+1): numbers.append(int(str(N*i)[::-1]))number..
https://www.acmicpc.net/problem/1874문제풀이input = __import__('sys').stdin.readlinen = int(input())x = 1arr = []out = []flag = Truefor _ in range(n): a = int(input()) while 1: if arr and a스택에 1~n의 수를 차례대로 push하면서 중간중간 원하는 수를 pop하여 수열을 만드는 문제-> arr을 stack으로 사용1. n이 커질수록 입력 시행횟수가 증가하기에 표준입력으로 받을 수 있게 함.2. 1~n까지 순서대로 push해야하기에 따로 x라는 변수를 만들어 1씩 증가하며 스택에 추가되도록 함.3. if arr : 로 스택이 비어있는지 확인4..
https://www.acmicpc.net/problem/16401문제명절이 되면, 홍익이 집에는 조카들이 놀러 온다. 떼를 쓰는 조카들을 달래기 위해 홍익이는 막대 과자를 하나씩 나눠준다.조카들이 과자를 먹는 동안은 떼를 쓰지 않기 때문에, 홍익이는 조카들에게 최대한 긴 과자를 나눠주려고 한다.그런데 나눠준 과자의 길이가 하나라도 다르면 조카끼리 싸움이 일어난다. 따라서 반드시 모든 조카에게 같은 길이의 막대 과자를 나눠주어야 한다.M명의 조카가 있고 N개의 과자가 있을 때, 조카 1명에게 줄 수 있는 막대 과자의 최대 길이를 구하라.단, 막대 과자는 길이와 상관없이 여러 조각으로 나눠질 수 있지만, 과자를 하나로 합칠 수는 없다. 단, 막대 과자의 길이는 양의 정수여야 한다. 입력첫째 줄에 조카의 수..
문제https://www.acmicpc.net/problem/27496Algorithm누적합을 이용하여 현재 알코올 농도를 구한다. 이때, 알코올이 지속되는 시간을 고려해야한다. 예제 입력 1을 보면 알코올의 지속시간이 3이므로, 첫번째 술은 3시간까지 적용 후 4번째 시간이후부터는 사라지도록 코드를 구성한다.문제에서 혈중 알코올 농도는 0.001을 곱하여 계산한다고 되어있는데, 이는 부동소수점 문제가 나타난다.해당 사진은 값을 임의로 넣었을때 prefix배열의 출력이다. 우리가 원하는 소수점 3번째 자리까지의 값이 반영이 안되어 있기 때문에, 0.001을 곱하지 않고 정수 그대로 계산한 후에, 해당 시간의 혈중 알코올 농도가 129 ~ 138 사이에 있는지 확인하는 방식으로 바꾸었다. Codeinput..
https://www.acmicpc.net/problem/10773문제풀이드디어 문제에 자료구조를 적용합니다. 화이팅..총 반복할 횟수를 알기위해 정수 K를 입력받고, stack이라는 변수명의 빈 리스트를 만듭니다.K번 반복할 동안 정수 a를 입력받습니다. 이 때 a는 문제에 기술된 재민이가 기입하는 수이며, 잘못된 숫자를 기입할 때 마다 재현이는 0을 입력받기도 합니다. stack이 비어 있으면 각줄의 a를 stack에 집어 넣습니다.단, a에 숫자 0을 입력받을 시엔 스택의 pop연산이 실행되어 마지막에 입력된 a가 삭제됩니다.0이 아니라면 다시 a를 stack에 집어 넣습니다.K번 반복이 완료되면 stack내에 있는 요소를 모두 더한 값을 출력하고 실행을 종료합니다.문제코드K=int(input())..
https://www.acmicpc.net/problem/1874 문제1이상 n(1 풀이스택에 직접 오름차순으로 수를 push하고 현재 인덱스 값과 스택 top이 같은 경우 pop한다. 연산 과정은 벡터에 저장한다.\#include #include #include using namespace std;int n, arr[100010], idx = 1;stack s;vector v;int main() { cin >> n; for (int i = 0; i > arr[i]; for (int i = 0; i
https://www.acmicpc.net/problem/1021  문제큐의 크기 N(1 풀이리스트로 iter값 이동시키며, 직접 수를 뽑아낸다. 이때 인덱스 처리 순서와 반환 값에 주의한다.#include #include using namespace std;int n, m, x, cnt = 0;listl;list::iterator iter;int main() { cin >> n >> m; for (int i = 1; i > x; if (l.size() == 1) break; list::iterator iterL = iter; int cntL = 0; while (*iterL != x) { if (iterL == l.begin()) iterL = l.end(); iterL--; cntL..
https://www.acmicpc.net/problem/1673문제풀이+ 유의사항 : 쿠폰을 도장으로 나눈 후 (서비스(추가) 치킨) 사용되지 않은 나머지 쿠폰을 고려해야 함.(이를 반복문에 넣어(나머지. %) 남은 치킨도 계산에 쓰이게 할 것) 1. 입력한 만큼 출력해주는 while True 문 삽입2. total 과 stamps 변수 설정 (n으로 함.)3. 도장의 개수가 k보다 크거나 같은 경우 계속 반복한다.3 - 1. 추가 치킨은 도장의 개수를 k로 나눈 몫이다.3 - 2. 총 치킨의 수는 ((이전 치킨의 수) + (추가 치킨의 수))이다. (값을 계속 갱신)3 - 3. 도장의 수는 (이전 도장의 수 를 k로 나눈 나머지 + (추가 치킨))의 수이다. (갱신) 4. 출력소스코드while Tru..
https://www.acmicpc.net/problem/2828문제풀이-바구니의 왼쪽과 오른쪽을 따로 생각하여 움직이도록 한다. 오른쪽 보다 숫자가 크다면 움직이고, 왼쪽보다 작으면 움직이는 식으로 최소한의 움직임을 지정한다.코드n, m = map(int, input().split())j = int(input())s = 0 #누적 움직임l = 1 #왼쪽 좌표r = m #오른쪽 좌표for i in range(j): a = int(input()) #사과 위치 if a > r: #오른쪽보다 클 때 s += a - r r = a l = a - m + 1 elif a
문제https://www.acmicpc.net/problem/14935함수 F(x)는 입력으로 주어진 수 x의 첫 자리와 수 x의 자리수를 곱한 결과를 반환하는 함수이다.예를 들어 x = 932 일때 F(x)는 9×3으로 27을 반환한다.입력받은 x에 대해서 함수 F를 수행하고, 나온 결과값에 다시 함수 F를 수행하는 것을 반복한다. 계속 반복해서 수행했을 때 어느 시점에서부터 동일한 수가 나오는 경우, 입력 x를 FA수 라고 한다.입력 x가 주어졌을때 이 수가 FA 수인지 출력하라.입력정수 x 가 주어진다. (0 ≤ x ≤ 10^100)출력정수 x가 FA수 라면 FA를 출력하고, 아니라면 NFA를 출력한다.풀이이번에는 조금 독특한 방식으로 문제를 접근해보겠습니다.함수F(x)의 반복적 적용이 항상 일정한..
KauKoala
'Koala - 15기' 카테고리의 글 목록 (6 Page)