전체 목록! 299

[BOJ] 1182번: 부분집합의 합

https://www.acmicpc.net/problem/1182모든 경우를 다 탐색하면 된다. 재귀 호출을 통해 풀 수도 있고 n이 20으로 작기 때문에 비트마스크를 이용해서 해결할 수 있다.재귀 호출을 통해 문제를 푸는 경우 -> 현재 이 인덱스의 값을 더하거나 안 더하거나(인덱스만 증가시키거나)로 전체를 탐색할 수 있다. 정말 뻘짓을 많이 해서 친구의 도움을 많이 받았는데 연습 밖에는 답이 없는 듯하다. 소스코드비트 마스크12345678910111213141516#include int main(){ int N, S, arr[20], count = 0; scanf("%d%d", &N, &S); for (int i = 0; i

온라인저지 2018.07.26

[BOJ] 14650번: 걷다보니 신천역 삼 (Small)

14650번: 걷다보니 신천역 삼 (Small) 14650번: 걷다보니 신천역 삼 (Small) 욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 금강삼도 식후경, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다. 그래서 욱제는 3을 가지고 놀아보기로 했삼. 3개 숫자(0, 1, 2)만 가지고 N자리 3의 배수를 만들어 보삼. 만드는 배수는 자연수 이삼. 0으로 시작하는 수는 만들 수 없는 수 이삼. 3의 배수가 몇 개나 나올 수 있삼? www.acmicpc.net N의 최대 크기가 9이기 때문에 brute force를 해도 되지만 간단한 dp 문제로 풀 수 있다. 참고: 14651번: 걷다보니 신천역 삼..

온라인저지 2018.07.19

[BOJ] 1011번: Fly me to the Alpha Centauri

1011번: Fly me to the Alpha Centauri 이동 횟수와 거리 간의 관계가 있다. 이동 횟수 거리 표시 이동 가능 거리 1 1 1 2 1 1 2 3 1 2 1 3 - 4 4 1 2 2 1 5 - 6 5 1 2 3 2 1 7 - 9 6 1 2 3 3 2 1 10 - 12 예를 들어 우리가 5만큼의 거리를 간다고 하자. 그렇다면 우리는 4번만 이동하면 된다. 규칙을 잘 찾아서 구현을 해주면 완성이다. 코드 #include int t; int main() { scanf("%d", &t); while (t--) { int d, a; // departure, arrival; scanf("%d %d", &d, &a); for (int i = 1;; ++i) if (a - d

온라인저지 2018.07.19

[BOJ] 1193번: 분수찾기

1193번: 분수찾기 많이 비효율적인 코드이긴 한데... 내일 다시 풀어보도록 하자. 코드 #include using namespace std; int main() { ios_base::sync_with_stdio(false), cin.sync_with_stdio(false); int n, i; cin >> n; for (i = 1; (i * i + i) / 2 < n; ++i) { } int tmp = ((i - 1) * (i)) / 2, s, f; if (i & 1) { s = i, f = 1; while (tmp != n - 1) s--, f++, tmp++; } else { s = 1, f = i; while (tmp != n - 1) s++, f--, tmp++; } cout

온라인저지 2018.07.19

[BOJ] 3054번: 피터팬 프레임

3054번: 피터팬 프레임 배열로 할 수도 있고 직접 출력을 할 수도 있지만 나는 직접 출력하는 방식을 택했다. 만약 배열로 한다면 세로로 보는 것이 편할 것 같다는 생각이다. 풀이 (1번 줄, 5번 줄), (2번 줄, 3번 줄)은 동일하다. 가로길이: 입력된 문자열 길이 * 4 + 1 세로 길이: 5 1번 줄: '#' | '*'이 나오는 위치: 3 7 11 ··· -> i % 4 == 3 *이 나오는 위치: 11 23 ··· -> i % 12 == 11 나머지는 '.'출력 2번 줄: '#' | '*'이 나오는 위치: 짝수 -> i % 2 == 0 '*'이 나오는 위치: 10 12 22 24 ··· -> i % 12 == 10 | i % 12 == 0 나머지는 '.' 출력 가운데: 얘는 까다로워서 문자열..

온라인저지 2018.07.19

[BOJ] 3055번: 탈출

3055번: 탈출 BFS로 풀 수 있다. 주의해야 할 점은 물이 흐르는 것을 계산할 때 임시 배열에 변경 사항을 저장했다가 실제 배열에 적용시켜줘야 물이 정상적으로 흐르는 것을 계산할 수 있다. 코드 #include #include #include using namespace std; int R, C; const int dx[] = {0, 0, 1, -1}, dy[] = {-1, 1, 0, 0}; char map[51][51]; bool visit[51][51]; pair D, S; inline bool safe(int y, int x) { return (0

온라인저지 2018.07.19