본문 바로가기

백준 알고리즘(Java)

6064번) 카잉 달력 시간이 많이 걸린 문제입니다. 풀긴 했지만, 다른분의 코드를 보고 이해했다고 보는게 맞겠네요. 아래는 처음 제가 시도해본 코드입니다. -> 메모리부족 맞았다고 확신해서 주석도 일일이 달고 있었는데 메모리부족이 떴습니다. 문제의 핵심이 M, N의 최소공배수인 lcm(M, N)만큼 for문을 다 돌리지 않는 것인듯 하네요. 예를들어 위의 박스 친 부분과 같이 M을 고정하고, N만큼만 반복해서 규칙을 찾아야 합니다. 아래가 정답 코드입니다.
1475번) 방 번호 어렵다고 생각한 문제였습니다. String으로 입력을 받는다면, 답을 구하는 로직에 집중할 수 있어 수월했을 것 같은데,그냥 입력을 int로 받아서 배열을 초기화하려다보니 조금 더 어려웠네요. 입력받은 수를 잘 정리했다고 가정한 후, 로직은 이렇습니다. 1. 6 or 9로 이루어진 수의 갯수를 구합니다.1-1. 그 수가 짝수라면 --> / 21-2. 홀수라면 --> / 2) + 12. 그 외의 수로 이루어진 배열을 구해, 각 자리의 수를 카운트 한 배열을 구합니다.3. 사용자가 0을 입력했을 땐, 특수한 경우이므로 결과를 하드코딩해줍니다. 짜고보니 별로 좋은 코드는 아닌 것 같네요. 너무 과하게 긴 것 같네요 ㅋㅋ그래도 누군가에겐 도움이 되었으면 합니다.
2775번) 부녀회장이 될테야 주어진 k(층), n(호)으로 (k + 1) * n 이중 배열을 구해 해결했습니다. (기준: 0층의 거주자 수) 다 풀고 보니 3중 for문이 좀 신경쓰이네요. 그냥 14 * 14 이중 이중배열을 구하는 것이 더 좋을 것 같습니다.
10250번) ACM 호텔 N번째 손님이 왔을 때, N-1을 H(층)으로 나누었을 때 1. 나머지로 호실 앞부분을 2. 몫으로 호실 뒷부분을 구했습니다. 아래는 코드입니다.
1101번) Fly me to the Alpha Centauri 정답률 26.811%여서 깜짝 놀랬었는데, 다행히 생각보다는 괜찮았네요. 이동 횟수를 기준으로, '얼마나 많은 거리를 이동할 수 있는가'를 정리해봤습니다. 규칙이 보이는 홀수먼저 잡아보면, 최대 이동거리가 k * k꼴임을 확인할 수 있습니다. 짝수의 경우, 줄어들때도 1씩 줄어야 하는 조건 때문에 홀수 경우에서 가운데 부분만 빼면 최대 이동거리를 구할 수 있습니다. 그리고 최대 이동거리는 k * k - k꼴이네요. 이를 이용해 주어진 두 지점의 이동거리를 D라고 했을 때 1. D == k * k 2. 그 외 2-1. (k - 1) * (k - 1) - (k - 1) = D 위와 같은 로직으로 해결했습니다. 아래는 코드입니다.
1924번) 2007년
1193번) 분수찾기 대각선으로 한줄씩 잘라 그 줄을 나타내는 변수 k를 구하고, 그 k가 짝수인지 홀수인지에 따라 경우를 나누었습니다.
2292번) 벌집 눈으로 확인하기 쉽게 아래 사진과 같이 규칙을 대강 표시해두고 해결했습니다.