본문 바로가기

전체 글

백준 16195] 1,2,3 더하기 9 문제 출처)www.acmicpc.net/problem/16195 먼저 1,2,3 1개로 만드는 경우의 수는 1가지 씩이다. 이때 2를 2개로 만드는 경우의 수는 1을 1개로 만드는 경우에 1을 더하는 경우이므로 (1,1) 의 위치의 값을 가져 올 수 있다. 3을 2개로 만드는 경우의 수는 2를 1개로 만드는 경우에 1을 더하는 경우와 1을 1개로 만드는 경우에 2를 더하는 경우이므로 (2,1) + (1,1) = 2 의 값으로 만들 수 있다. 4를 2개로 만드는 경우의 수는 3을 1개로 반드는 경우에 1을 더하는 경우와 2를 1개로 만드는 경우에 2를 더하는 경우와 1을 1개로 만드는 경우에 3을 더하는 경우의 수 (3,1)+(2,1)+(1,1) = 3 으로 만들 수 있다. 따라서 n개의 값을 m개를 이용.. 더보기
바둑알 이동의 경우의 수 정답) 320 다음과 같이 올수 있는 경우의 수를 더해 보면 320 가지 이다. 이렇게 경우의 수를 모두 세어 주어도 되지만 검은색이 위쪽 흰색 돌에 4번 만나기 위해서는 북동,북,북서 세방향이다. 오른쪽 흰색 돌에 4번만에 만나기 위해서는 북동,동,남동 세방향으로 이동한다. 아래와 왼쪽 역시 동일하다. 결국에는 한방향에 대해서 한번에 3가지씩을 선택할 수 있다. 따라서 한방향으로 이동하는 경우의 수는 3 * 3 * 3 * 3 이다. 이게 4방향이므로 4 * 3 * 3 * 3 * 3 이 된다. 하지만 여기서 각 모서리로 도착하는 4가지 경우가 중복이 발생한다. 왼쪽 상단 모서리로 올라가는 경우 위쪽으로 올라가는 경우와 왼쪽으로 가는 경우의 두가지가 겹친다. 따라서 4귀퉁이값을 빼주면 된다. 더보기
백준1977-완전제곱수(브론즈1) 문제출처 : https://www.acmicpc.net/problem/1977 1977번: 완전제곱수 M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완� www.acmicpc.net 문제풀이) m의 제곱근을 구해서 올림한 수 n의 제곱근을 구해서 내림한 수 까지의 제곱의 합을 구하면 된다. #include #include #include using namespace std; int main() { int m,n; cin >> m >> n; int s = ceil(sqrt(m)); int e = floor(sqrt(n)); int sum = 0;.. 더보기
백준1925-삼각형(브론즈1) 문제출처 : https://www.acmicpc.net/problem/1925 1925번: 삼각형 평면상에 세 개의 점이 주어지면, 그 세 점으로 이루어지는 삼각형은 유일하게 결정된다. (또는, 삼각형이 이루어지지 않기도 한다.) 세 점의 좌표가 주어졌을 때 다음에 따라 이 삼각형의 종류 www.acmicpc.net 문제풀이) 1. 같은 선에 있는지 없는지는 세 점의 기울기를 체크해서 처리 2. 직각/예각/둔각 은 두 벡터의 내적이 0 이면 직각 음수이면 둔각 양수이면 예각을 이용해 처리 (https://mrw0119.tistory.com/12) 참고 #include #include #include #define PI 3.1415926535 using namespace std; struct point{ .. 더보기
백준1924-2007년(브론즈1) 문제출처 : https://www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net 문제풀이) 날짜 까지의 모든 일자를 구한 후 7로 나누어서 나머지를 가지고 확인한다. #include #include using namespace std; int main() { int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int m,d,sum=0,week; cin >> m >> d; for(int i=0.. 더보기
백준1855-암호(브론즈1) 문제출처 : https://www.acmicpc.net/problem/1855 1855번: 암호 준표와 세준이는 서로 솔루션을 토론 하면서 다른 사람이 자신들의 솔루션을 듣지 못하게 하도록 서로 메시지를 주고받을 때 메시지를 암호화 하여서 주고받았다. 암호를 만드는 방법은 다음과 www.acmicpc.net 문제 풀이) 입력 들어온 데이터를 열의 갯수에 맞춰서 배열에 저장 후 배열을 행의 단위로 읽어서 출력해 주면 된다. #include #include using namespace std; int main() { char dec[300]; char enc[100][30]={0}; int y=0,x=0; int col; cin >> col >> dec; int len = strlen(dec); int di.. 더보기
백준1834-나머지와 몫이 같은 수(브론즈1) 문제출처 : https://www.acmicpc.net/problem/1834 1834번: 나머지와 몫이 같은 수 N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구하는 프로그램을 작성하시오. 예를 들어 N=3일 때, 나머지와 몫이 모두 같은 자연수는 4와 8 두 개가 있으므로, 그 합은 12이다. www.acmicpc.net 문제풀이) n 이 있으면 나머지는 1부터 n-1 까지 이다. 몫과 나머지가 같은 경우는 i*n + i 인 경우이다. #include using namespace std; int main() { int n; cin >> n; long long sum=0; for(long long i=1;i 더보기
1802-종이접기(브론즈1) 문제 출처 : https://www.acmicpc.net/problem/1802 1802번: 종이 접기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 1000보다 작거나 같은 자연수이다. 둘째 줄부터 T개의 줄에 각각의 종이가 어떻게 접혀있는지가 주어진다. 종이의 정보는 문자열로 주어지며, 1 www.acmicpc.net 문제풀이) 이 문제를 살펴 보면 정 가운데를 접고 있기 때문에 가운데를 기준으로 양쪽은 반드시 거꾸로 된 모습이다. 가령 가운데 0 이고 오른쪽이 01 이 되었다면 왼쪽은 01 과 같이 01001 과 같이 되어야 한다. 즉 01010 과 같이 왼쪽과 오른쪽의 위치(0번째 위치와 4번째 위치가 동일하고 1번째 위치와 3번째 위치가 동일한 결과가 나올 수가 없다.) 가 같으면 만들 .. 더보기