본문 바로가기

Algorithm/Math

(97)
(C++) - 백준(BOJ) 1673번 : 치킨쿠폰 www.acmicpc.net/problem/1673 1673번: 치킨 쿠폰 강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환 www.acmicpc.net ad-hoc 문제였습니다. 그 뜻처럼 이런 문제에만 적용되는 유일한 해결책을 찾는 문제입니다. 풀이방법 1. 입력 이 문제는 입력의 끝이 규정되어 있지 않습니다. 따라서 loop탈출을 위해서 파일의 끝을 찾았을 때 입력받고 있었던 loop를 탈출해야 합니다. 파일의 끝은 scanf를 사용해서 입력받았을 때 EOF(End Of File)을 만나면 false(0)을 반환합니다. 2. 쿠폰이 남아 있는 동안 loop..
(C++) - 백준(BOJ) 1002번 : 터렛 www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 두 원의 중심과 두 원의 교차점과 한 원의 중심점 사이의 거리가 두 개 주어졌을 때 만들 수 있는 원을 생각하고 이렇게 생긴 두 개의 원이 겹침으로써 만들어지는 교차점의 개수를 구하는 문제였습니다. 풀이방법 1. 값 구하기 : 주어진 두 원의 중심의 점으로 거리를 구할 수 있습니다. 이를 변수 a로 정의합니다. 다음은 (x1,y1) , (x2,y2) 사이의 거리를 구하는 공식입니다. $$a = \sqrt{(x1-x2)^2 + (y1-y2)^2} $$ 이후 각 반지..
(C++) - 프로그래머스(연습문제) : 행렬의 곱셈 programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr 행렬곱셈 구현 문제였습니다. Code #include #include using namespace std; vector solution(vector arr1, vector arr2) { vector answer; for(int i = 0; i < arr1.size(); i++){ for(int j = 0; j < arr1[i].size(); j++){ vect..
(C++) - 프로그래머스(연습문제) : 최대공약수와 최소공배수 programmers.co.kr/learn/courses/30/lessons/12940 코딩테스트 연습 - 최대공약수와 최소공배수 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 programmers.co.kr 유클리드 호제법으로 최대공약수를 구한뒤 이 값으로 최소공배수를 구하는 문제였습니다. Code #include using namespace std; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } vector solution(int n, int m) { vector answer; in..
(C++) - 프로그래머스(연습문제) : 소수찾기 programmers.co.kr/learn/courses/30/lessons/12921 코딩테스트 연습 - 소수 찾기 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 programmers.co.kr 아리스토텔레스의 체를 이용해 소수를 찾는 문제였습니다. 풀이방법 1. 100만까지의 소수 아닌 것을 체크해줍니다. 2. 2부터 n까지 중 체크가 안되어 있는 것은 소수이므로 답을 더해줍니다. Code #include using namespace std; void primeInit(int ck[]){ for(int i = 2 ; i
(C++) - 프로그래머스(연습문제) : 124 나라의 숫자 programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 몫과 나머지를 이용한 수학 문제였습니다. 풀이방법 이 나라의 한 자리 수는 3개의 수로 표현됩니다. 10진수에서 10을 나눈 나머지는 곧 가장 오른쪽 한 자리의 수를 의미합니다. 3으로 나눈 나머지가 이 나라의 1자리이므로 10진수를 3씩 나누어 조건을 확인한 뒤, 해당 나라의 숫자로 한 개씩 문자를 추가해줍니다. Code #include using namespace std; string solution(int n) { string answer = ""; int num = n; while(num){ if(num % 3 == 0) answer = "..
(C++) - 백준(BOJ) 1173번 : 운동 www.acmicpc.net/problem/1173 1173번: 운동 첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다. www.acmicpc.net 수학적으로 생각해 푼 문제였습니다. 풀이방법 * -1인 경우 : 운동시 바로 맥박이 M을 초과할 경우가 -1인 경우입니다. 아무리 최소 맥박에서 운동을 하더라도 운동 하자마자 제한 맥박을 초과시 운동을 n분할 수 없습니다. 그 외의 경우에는 휴식을 계속 취해서 맥박을 최소로 하거나 다음 운동을 바로 할 수 있을 때까지만 쉬어줌으로써 계속 운동을 할 수 있습니다. 1. 현재 맥박 + T(운동 시 늘어나는 맥박 수) > N >> m >> M >> T >> R; currentPulse = m; if(currentPulse + T > M){ cout
(C++) - 백준(BOJ) 6502번 : 동혁 피자 답 www.acmicpc.net/problem/6502 6502번: 동혁 피자 대전 ACM-ICPC Regional가 끝나면, 대회 참가자들은 다같이 카이스트 근처의 동혁 피자에 간다. 대회는 5시간동안 진행되므로, 참가자는 모두 배가 매우 고프다. 피자를 최대한 빨리 먹기 위해서, 큰 www.acmicpc.net 간단한 수식으로 충족여부를 결정하는 구현문제였습니다. 풀이방법 1에 해당하는 선분은 피자의 너비/2입니다. 2에 해당하는 선분은 피자의 높이/2 입니다 3번은 따라서 피타고라스 정리에 의해 $\sqrt{ (\frac{너비}{2})^2 + (\frac{높이}{2})^2 }$ 가 됩니다 이 3번 선분의 길이가 식탁 반지름보다 작거나 같으면 fit입니다. Code #include using namesp..