목록알고리즘 문제풀기 (50)
문제링크 : https://www.acmicpc.net/problem/16986 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123import java.util.Scanner; // 손가락 가지수가 최대 9개입니다.// 즉, 지우가 낼 수 있는 가지수가 9개 뿐이므로 아무리 많아도 9!개의 가지..
문제링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWjlJGwK3lMDFAVT 잘 모르는 개념의 문제를 푸는 중이라 풀이를 올릴만한 문제를 못찾아서 오랜만에 올리는 글 ! - 소스 코드 -12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include#include#include #define pii pair using namespace std;//comparator 함수 정의 bool comp(pii a,pi..
문제링크 : https://www.acmicpc.net/problem/1322 - 소스 코드 - 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849/* * 시간복잡도 : O(logN) [ N은 K입니다. ] * 공간복잡도 : O(logN) [arrayList] * * x+?가 x|?이기 위해서는 x의 비트가 0인 부분들로 구성되어야 합니다. * ex) x=101(2) ?=10(2) * 그래서 1부터 2씩 곱하면서 x의 해당 비트가 0일 경우 * ArrayList에 그 비트가 나타내는 수치를 저장했습니다. * 2^(arr.size)를 해준 이유는 이진수에서는 해당 자리가 0,1인 경우의 수 2가지가..
문제링크 : https://www.acmicpc.net/problem/15711 테스트케이스 수(1
문제링크 : https://www.acmicpc.net/problem/1124 두 자연수 A,B (2>A>>B; bool check[100002]; fill_n(check,100002,true); check[1]=false; // 1과 0은 소수가 아님 ! check[0]=false; int arr[100002]={0}; int result=0; for(int i=2;i
문제링크 : https://www.acmicpc.net/problem/2018 정수 N(1 연속된 수의 합이라는 점에서 등차수열을 이용했다. 5+6+7+8은 1+2+3+4+5+6+7+8에서 1+2+3+4를 뺀 값이라는 점이다. 즉, 1~8까지의 등차수열에서 1~4까지의 등차수열을 뺀 값이다. 그래서 n이라는 수를 받아서 n/2 +1까지를 탐색하며 해당 수(i)까지의 등차수열의 합이 원래의 수(N)보다 크거나 같은지를 확인한다. 그리고 크거나 같을 경우 N과의 차이를 구한다. 이렇게 구해진 N이 1~A(자연수) 까지의 등차수열의 합으로 만들 수 있는 숫자라면 i까지의 등차수열에서 A까지의 등차수열을 뺀 값이 N이라는 것을 알 수 있다. N의 최대값이 10^7이므로 더했을 때 int의 범위를 넘..
문제링크 : https://www.acmicpc.net/problem/2004 정수 n,m (0>a>>b; int c=a-b; int tempA,tempB,tempC; tempA=a; tempB=b; tempC=c; ll aCount1=0; ll bCount1=0; ll cCount1=0; // 2의 배수 ll aCount2=0; ll bCount2=0; ll cCount2=0; // 5의 배수 while(tempA>=2){ tempA/=2; aCount1+=tempA; } while(tempB>=2){ tempB/=2; bCount1+=tempB; } while(tempC>=2){ tempC/=2; cCount1+=tempC; } while(a>=5){ a/=5; aCount2+=a; } ..
문제링크 : https://www.acmicpc.net/problem/2870 줄의 개수 (1 파싱 연습을 위한 간단한 문제이다. 여기서 중요한 것은 어떻게 숫자를 뽑아낼 것인가 / 뽑아낸 숫자를 어떻게 정렬할 것인가이다. 먼저 숫자를 뽑아내는 것은 라인별로 입력을 받아서 숫자를 쌓고 있음을 의미하는 bool 변수 flag를 만든다. 숫자를 만날 경우 flag를 true로 하고 temp(string)에 숫자를 쌓는다. 그리고 문자를 만날 경우 flag를 false로 바꿔주며 숫자가 끝났음을 표시하고 만들어진 문자열(숫자)의 앞에 0을 제거해준다. (문자열의 길이를 통해 0 하나만 있을 경우 예외처리) 문자를 만나지 않았지만 라인이 끝났을 경우는 flag를 통해 확인할 수 있다. 다음으로 정렬..