◎ 자료구조와 알고리즘 143

[백준 / BOJ] 1018번 체스판 다시 칠하기 (C++, Python)

링크 : https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 문제 문제 풀이 난항을 겪었던 문제다. 어떻게 풀어야할지는 대충 감이 오는데, 구현이 잘 되지 않아 시행착오를 많이 겪었다. 체스판이 W, B 둘 중 하나의 패턴으로 시작한다. 가만히 생각해보면, W나 B가 맨 왼쪽 상단에 있을 때 W와 B의 위치가 정해지는 규칙이 나온다. W가 (0, 0)에서부터 시작한다고 가정하면 (0, 2), (0, 4), (1, 1), (1, 3) ... ..

[백준 / BOJ] 7568번 덩치 (C++, Python)

링크 : https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 pair를 이용하면 더욱 쉽게 해결할 수 있는 문제다. for (int i = 0; i > arr[i].first >> arr[i].second; for (int i = 0; i < N; ++i) { cnt = 1; for (int j = 0; j < N; j++) if (arr[i].first < arr[j..

[백준 / BOJ] 2231번 분해합 (C++, Python)

링크 : https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 문제 문제 풀이 애초에 브루트포스로 풀라고 준 문제인 것을 알아서 그런지 접근 방법이 쉬웠다. 그냥 1부터 N까지 for문을 돌려 i 인자가 생성자인지 N과 비교하면 끝나는 문제다. C++ 코드 전문 HTML 삽입 미리보기할 수 없는 소스 Python 코드 전문 HTML 삽입 미리보기할 수 없는 소스 소감

[백준 / BOJ] 2798번 블랙잭 (C++, Python)

링크 : https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 문제 문제 풀이 3중 for문으로 쉽게 해결했다. DFS로도 풀 수 있을 것 같지만 아직 미숙하므로 나중에 풀어볼 예정이다. C++ 코드 전문 HTML 삽입 미리보기할 수 없는 소스 Python 코드 전문 HTML 삽입 미리보기할 수 없는 소스 소감

[백준 / BOJ] 11729번 하노이 탑 이동 순서 (C++, Python)

링크 : https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 문제 문제 풀이 재귀로 풀지 않으면 접근 방식이 참 어려울 것 같은 문제다. 찬찬히 생각해보면, 이동 과정을 통째로 i) n-1개의 원판을 2번째 장대로 옮긴다. ii) 제일 밑에 있는 원판을 3번째 장대로 옮긴다. iii) 2번째 장대에 있는 원판들을 3번째 장대로 옮긴다. 라고 요약할 수 있다. ii)번째 과정을 생각해보자. 이는 1) 2번째 장대의 맨 마지막 원판을 제외..

[백준 / BOJ] 2447번 별 찍기 - 10 (C++, Python)

링크 : https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 문제 문제 풀이 어려운 문제다. 재귀에 대한 완전한 이해가 있어야 풀 수 있는 문제인 것 같다. C++과 파이썬의 풀이가 살짝 다르지만 이번 문제는 모든 분이 C++ 상세 풀이를 보시면 도움이 될 것 같습니다. C++ 상세 풀이 더보기 정답률이 52%지만, 수학적 발상이 있어야 하는 문제다. 어차피 재귀적으로 풀어야 하는 문제이므로 N = 3일 때와 N = 9일..

[백준 / BOJ] 10870번 피보나치 수 5 (C++, Python)

링크 : https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 문제 문제 풀이 문제에 점화식이 주어졌으므로 그대로 구현하면 된다. 아래 강좌를 참고해도 좋다. https://reo91004.tistory.com/54 [자료구조] 순환 (Recursion) 순환 (Recursion) 흔히 재귀라고 부른다. 즉, 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 순환으로 구현할 수 있는 알고리즘의 ..

[백준 / BOJ] 10872번 팩토리얼 (C++, Python)

링크 : https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 문제 풀이 간단한 재귀 문제이다. 재귀를 이해해야 하는 기초 문제라 아래 링크를 참고하면 좋을 것 같다. https://reo91004.tistory.com/54 [자료구조] 순환 (Recursion) 순환 (Recursion) 흔히 재귀라고 부른다. 즉, 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 순환으로 구현할 수 있는 알고리즘의 대다수는 반복으로도 구현할 수 있다. 다만 reo91004.tistory.com C++ 코드 전문 HTML 삽입 미리보기할 수 없는..

[백준 / BOJ] 3053번 택시 기하학 (C++, Python)

링크 : https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 문제 문제 풀이 처음에 택시 기하학이 이해가 가지 않아 인터넷을 참고한 문제다. 너무 설명을 잘해주신 분들이 많아 그 분들의 블로그를 참고하는 것이 더 도움이 될 것 같다. https://lalayeon.tistory.com/178 [백준] 3053 택시 기하학 (C++) 문제 www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를..

[백준 / BOJ] 4153번 직각삼각형 (C++, Python)

링크 : https://www.acmicpc.net/problem/1085 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램 www.acmicpc.net 문제 문제 풀이 피타고라스 정리를 코드로 구현하면 된다. C++ 코드 전문 HTML 삽입 미리보기할 수 없는 소스 Python 코드 전문 HTML 삽입 미리보기할 수 없는 소스 소감