Koder / 박성훈
article thumbnail
백준 BOJ 2485 - 가로수
알고리즘/백준 BOJ 2021. 1. 11. 22:17

이 문제의 핵심은 최대공약수이다. 이걸 중학교 2학년때 풀었던거같은데 그때 한참걸렸던걸 지금 몇분만에 풀어내는걸 보니 참 감회가 새롭다.. ㅋㅋ 가장 먼 나무 - 가까운 나무로 길이를 구하고, 최대공약수로 나눠준 다음 가장 끝에 +1 해줘서 나무의 전체 수를 구한다. 그다음 입력된 나무의 수인 N을 빼주면 우리가 원하는 답을 찾을 수 있다. #include #include using namespace std; typedef long long int ll; int input[123456] = {0}; int arr[123456] = {0}; ll gcd(ll a, ll b){ while(b!=0){ ll r = a%b; a = b; b = r; } return a; } int main(){ int n; s..

article thumbnail
백준 BOJ 10994 - 별 찍기 - 19
알고리즘/백준 BOJ 2021. 1. 11. 21:25

별 찍기 문제 그냥 구현만 해주면 된다. 문제 내는 사람도 귀찮았나보다 ㅎ www.acmicpc.net/problem/10994 #include int arr[400][400] = {0}; void draw(int pos, int len){ for(int x=pos; x

article thumbnail
백준 BOJ 1940 - 주몽
알고리즘/백준 BOJ 2021. 1. 11. 21:11

베이직한 투 포인터 www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 번호를 정렬한 뒤 가장 앞 값과 가장 뒷 값의 인덱스를 변수로 잡는다 만약 더했을때 m과 같다면, 갑옷을 만드는데 사용하므로 앞값++, 뒷값--를 동시에 해주고 m보다 크다면 뒷값이 너무 큰 경우이므로 뒷값--만, m보다 작다면 앞값이 너무 작은 경우이므로 앞값++만 해주면 O(N)정도에 끝낼수 있다. #include #include using namespace st..

article thumbnail
백준 BOJ 1244 - 스위치 켜고 끄기
알고리즘/백준 BOJ 2021. 1. 11. 21:02

출력 형식을 지키자!!!!! (복창중) 스위치 바꿀때의 팁! ^= 1 연산을 통해서 1이면 0으로, 0이면 1으로 바꿔줄수 있다. 그냥 구현문제라 뭐 설명할것도 별로 없다... #include int swit[123] = {0}; int main(){ int n,m; scanf("%d", &n); for(int i=1; i

article thumbnail
백준 BOJ 5347 - LCM
알고리즘/백준 BOJ 2021. 1. 11. 20:36

날먹문제 솔직히 이게 왜 실4인지 잘 모르겠다. www.acmicpc.net/problem/5347 5347번: LCM 첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다. www.acmicpc.net 유클리드 호제법 씌운 GCD를 이용하면 빠르게 구할수 있다. #include typedef long long int ll; ll gcd(ll a, ll b){ while(b!=0){ ll r = a%b; a = b; b = r; } return a; } ll lcm(ll a, ll b){ return a*b/gcd(a,b); } int main(){ int n; ll a, b; scanf(..

article thumbnail
백준 BOJ 2670 - 연속부분최대곱
알고리즘/백준 BOJ 2021. 1. 11. 20:30

간단한 DP. 그런데 N범위가 작아서 브루트포스해도 될거같다. dp[k]를 k번째 수를 곱할때의 최대값 으로 정한다. 그러면 dp[k]를 만들 수 있는 방법은 기존까지의 수들을 싹 버리고 k번째 수만을 가지고 새로 시작하는 경우이거나, 기존까지의 수들 = dp[k-1] 에 k번째 수를 곱하는 경우 두가지로 나뉘게 된다. 이렇게 짜주면 쉽게 AC를 받을 수 있다. #include double arr[12345] = {0.0}; double dp[12345] = {0.0}; double max(double a, double b){return a>b?a:b;} int main(){ int n; double ans = -1; scanf("%d", &n); for(int i=0; i

반응형