1. 오늘 학습 목표

2. 오늘 학습 한 내용
오늘의 코드카타
오늘은 코드카타 문제 2개를 풀었다.
이번 문제에서는 반복문을 이용해 같은 문자열을 여러 줄 출력하는 방법과 최대공약수, 최소공배수를 구하는 방법을 연습한다.
첫 번째 문제는 출력 형태를 정확히 맞추는 것이 중요하고, 두 번째 문제는 두 수의 관계를 이용해 계산하는 것이 핵심이다.
1. 직사각형 별찍기
문제 설명
두 개의 정수 n, m이 주어진다.
별 * 문자를 이용해서 가로 길이가 n, 세로 길이가 m인 직사각형을 출력하는 문제다.
예를 들어 입력이 5 3이라면 가로로 별 5개를 출력하고, 이 줄을 총 3번 반복하면 된다.
입출력 예
입력
5 3
출력
*****
*****
*****
문제 접근
이 문제는 별을 한 줄에 몇 개 출력할지, 그리고 그 줄을 몇 번 반복할지만 생각하면 된다.
가로 길이는 n이고, 세로 길이는 m이다.
'*' * n을 사용하면 별을 n개 이어 붙인 문자열을 만들 수 있다.
그리고 for문을 이용해 이 문자열을 m번 출력하면 된다.
문자열도 곱셈을 이용하면 같은 문자를 반복해서 만들 수 있다.
풀이 코드
a, b = map(int, input().strip().split(' '))
for i in range(b):
print('*' * a)
코드 설명
input().strip().split(' ')
입력받은 문자열의 앞뒤 공백을 제거하고, 공백을 기준으로 나눈다.
map(int, ...)
나누어진 값을 정수로 변환한다.
a, b = ...
첫 번째 값은 가로 길이, 두 번째 값은 세로 길이로 저장한다.
for i in range(b):
세로 길이만큼 반복한다.
print('*' * a)
별을 가로 길이만큼 출력한다.
풀이 정리
이 문제는 어렵게 생각할 필요 없이, 별 한 줄을 먼저 만든 뒤 그 줄을 여러 번 출력하면 된다.
'*' * a는 별을 a개만큼 반복한 문자열을 만들어준다.
그다음 range(b)로 b번 반복하면서 출력하면 직사각형 형태가 완성된다.
출력 문제는 계산보다 원하는 모양을 정확히 만드는 것이 중요하다.
2. 최대공약수와 최소공배수
문제 설명
두 수 n, m을 입력받아 최대공약수와 최소공배수를 구하는 문제다.
최대공약수는 두 수를 모두 나누어떨어지게 하는 가장 큰 수다.
최소공배수는 두 수의 공통 배수 중 가장 작은 수다.
예를 들어 n = 3, m = 12라면 최대공약수는 3, 최소공배수는 12이다.
따라서 [3, 12]를 반환하면 된다.
입출력 예
n = 3
m = 12
return = [3, 12]
n = 2
m = 5
return = [1, 10]
문제 접근
먼저 최대공약수를 구해야 한다.
두 수 중 더 작은 수부터 1까지 거꾸로 확인하면서, 두 수를 모두 나누어떨어지게 하는 수를 찾으면 된다.
가장 큰 수부터 확인하기 때문에, 처음으로 조건을 만족하는 값이 최대공약수가 된다.
최대공약수를 구한 뒤에는 최소공배수를 구할 수 있다.
최소공배수는 다음 공식으로 계산할 수 있다.
최소공배수 = n * m // 최대공약수
최대공약수를 먼저 구하면 최소공배수는 공식을 이용해 간단하게 구할 수 있다.
풀이 코드
def solution(n, m):
answer = []
for i in range(min(n, m), 0, -1):
if n % i == 0 and m % i == 0:
GCD = i
break
LCM = n * m // GCD
answer = [GCD, LCM]
return answer
# solution(2, 5)
코드 설명
answer = []
최대공약수와 최소공배수를 담을 리스트를 만든다.
for i in range(min(n, m), 0, -1):
두 수 중 더 작은 값부터 1까지 거꾸로 반복한다.
if n % i == 0 and m % i == 0:
현재 값 i가 두 수를 모두 나누어떨어지게 하는지 확인한다.
GCD = i
조건을 만족하면 해당 값이 최대공약수다.
break
가장 큰 수부터 확인했기 때문에, 최대공약수를 찾으면 반복을 멈춘다.
LCM = n * m // GCD
최대공약수를 이용해 최소공배수를 계산한다.
answer = [GCD, LCM]
최대공약수와 최소공배수를 리스트에 담는다.
풀이 정리
이 문제는 최대공약수와 최소공배수의 관계를 이해하는 것이 중요하다.
최대공약수는 두 수를 모두 나누어떨어지게 하는 가장 큰 수이므로, 작은 수부터 거꾸로 확인하면 쉽게 찾을 수 있다.
최소공배수는 두 수의 곱을 최대공약수로 나누면 구할 수 있다.
최대공약수만 정확히 구하면 최소공배수는 공식으로 바로 계산할 수 있다.
나의 간단 소감
- 오늘은 별찍기 문제와 최대공약수, 최소공배수 문제를 풀었다.
직사각형 별찍기 문제는 코드 자체는 짧지만, 입력을 어떻게 받고 원하는 모양으로 어떻게 출력할지 생각해야 한다. 특히 문자열에 곱셈을 사용할 수 있다는 점이 중요하다. '*' * a처럼 작성하면 별을 원하는 개수만큼 반복해서 만들 수 있다.
문자열도 숫자처럼 반복 연산이 가능하다는 점을 알고 있으면 출력 문제를 훨씬 간단하게 풀 수 있다.
최대공약수와 최소공배수 문제는 수학 개념이 들어가서 처음에는 조금 더 복잡하게 느껴진다. 그래도 최대공약수를 먼저 구하고, 그 값을 이용해 최소공배수를 계산한다고 생각하면 흐름이 정리된다.
특히 range(min(n, m), 0, -1)처럼 작은 수부터 거꾸로 확인하는 방식이 인상적이다. 가장 큰 약수부터 찾기 때문에 조건을 만족하는 값을 찾으면 바로 break로 멈출 수 있다.
문제를 풀 때 무작정 반복하는 것보다, 어디서부터 반복하면 더 효율적인지 생각하는 것도 중요하다.
오늘 문제들을 풀면서 출력 문제와 수학 문제는 접근 방식이 꽤 다르다는 걸 느낀다. 별찍기는 출력 형식을 맞추는 것이 중요하고, 최대공약수 문제는 계산 규칙을 코드로 옮기는 것이 중요하다.
아직은 문제 유형마다 바로 풀이가 떠오르지는 않지만, 문제를 읽고 필요한 과정을 하나씩 나누는 연습은 계속 쌓이고 있다. 앞으로도 입력, 반복, 조건, 계산 과정을 먼저 정리한 뒤 코드로 옮기는 방식으로 연습해야겠다.
+(프로젝트 후기) 오늘은 프로젝트 준비하는 마지막날이다. 다행히 미리미리 한 결과, 오늘 오후 4시 전에 끝낼수 있었다.
사실 내가 일이 쌓이면 불안해서 미리미리 쳐내는 스타일이라 이번 프로젝트를 조금 밀어붙여서 진행을 했는데, 팀원분들이 불만없이 잘 따라와주고 굳이 말안해도 알아서 해주는 스타일이었어서 너무 좋았다.
그래도 처음부터 속도를 붙여서 달리다보니 속도에 가속도가 붙는 느낌이었다. 완주까진 무사히 했으니 등수는 몇 등일지 기대가 된다.
'내일배움캠프' 카테고리의 다른 글
| [본캠프] 데이터기반 QA/QC 부트캠프 25일차 (1) | 2026.06.16 |
|---|---|
| [본캠프] 데이터기반 QA/QC 부트캠프 24일차 (1) | 2026.06.15 |
| [본캠프] 데이터기반 QA/QC 부트캠프 22일차 (2) | 2026.06.11 |
| [본캠프] 데이터기반 QA/QC 부트캠프 21일차 (0) | 2026.06.10 |
| [본캠프] 데이터기반 QA/QC 부트캠프 20일차 (0) | 2026.06.09 |