[백준 11720] 숫자의 합(V4) - 문제를 분석하는 습관
·
Algorithm
[V4] 11720 숫자의 합 문제 바로 가기 문제N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. 문제첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. 출력입력으로 주어진 숫자 N개의 합을 출력한다. V4의 아주 간단해 보이는 문제입니다.이 문제를 예로 우리가 코딩테스트에서 알고리즘 문제를 분석하는 습관과 중요성을 강조하기 위해서 이 글을 작성합니다. "코딩테스트에서 문제를 분석하는 습관을 가져야 하는 이유"처음 이 문제를 읽고나서 어떤 풀이를 떠올렸나요?저는 어제 나누기와 모듈러 연산과 관련된 문제를 풀었더니 아래와 같은 풀이를 맨처음 떠올렸습니다. 사고 과정54321을 입력받고 15를 출력.5 + 4..
[백준 1074] Z(G5) — 재귀로 방문 순서 계산하기
·
Algorithm
[G5] 1074 Z 문제 바로 가기 1. 문제 요약정수 N, R, C가 주어졌을 때, 2^N × 2^N 배열을 Z 모양 순서로 방문한다고 하면좌표 (R, C)는 몇 번째(0-index) 로 방문되는지 출력하는 문제다. 여기서 핵심은 배열을 진짜로 만들고 순회하면 절대 안 된다는 점이다.2^N은 N이 커질수록 급격히 커지고, 모든 칸을 직접 방문하면 시간/메모리가 터진다. 2. 처음 시도: 전체를 돌면 왜 망할까?가장 흔한 실수는 이런 접근이다.실제 2^N × 2^N 배열 생성Z 순서대로 하나씩 방문하면서 카운트 증가(R,C) 도달하면 출력왜 안 되냐면, 칸 수가 2^(2N)개라서N이 조금만 커져도 탐색 자체가 “물리적으로” 불가능해진다. 즉, 이 문제는 “탐색” 문제가 아니라(R,C)가 속한 위치가..
[백준 1629] 곱셈 (S1) — 메모리 초과에서 분할정복 모듈러 거듭제곱까지
·
Algorithm
[S1] 1629 곱셈 문제 바로 가기1. 문제 요약정수 A, B, C가 주어졌을 때,(A^B) % C 를 출력하는 문제다. 여기서 핵심은 B가 매우 클 수 있다는 점이다.단순히 A를 B번 곱하는 방식은 시간/메모리 측면에서 절대 통과할 수 없다.2. 처음 시도: 단순 재귀의 함정 (메모리 초과)처음에는 다음처럼 b를 1씩 줄이며 곱하는 재귀를 작성했다.return a * func(a, b-1); 왜 메모리 초과가 나는가?이 방식은 재귀 호출이 B번 쌓이는 선형 재귀( O(B) )다.B가 크면 호출 스택이 끝없이 쌓인다.Java는 재귀 깊이가 커지면 스택 메모리가 터지며 보통 StackOverflowError가 발생한다.백준에서는 이런 상황이 “메모리 초과”로 판정되는 경우가 많다.즉, 단순 재귀는 스택..