1) 오늘의 고백 — “아는 것 같은데, 막상 풀면 하얘집니다”
프로그래머스 레벨0 문제에 도전했습니다. 20년간 복잡한 설계 도면을 다뤄왔기에, '레벨0' 정도는 자신 있다고 생각했습니다. 하지만 그것은 저의 오만이었습니다. 하나하나의 부품(문법)은 알겠는데, 막상 '설계도(알고리즘)'를 그리려니 머릿속이 하얘졌습니다.
그래서 저는 정답 맞히기를 잠시 내려놓고, 정답을 분해하고 재조립하는 훈련을 시작했습니다.
2) 훈련법 — 분해 → 주석화 → 재조립 → 단계별 학습
제가 오늘 시도한 방법은 이렇습니다.
- 다른 사람의 정답 코드를 복사
- ChatGPT(@채트)에게 줄 단위 한글 주석과 함께 함수 설명을 달아달라고 요청
- 주석만 보고 코드를 처음부터 다시 작성
- 그래도 어려우면 단계별 학습 진행
- 막히면 정답 대신 힌트만 요청
이 과정을 통해 정답의 속도보다, **코드 구조(패턴)**를 제 몸에 익히는 게 목표입니다.
3) 오늘의 예시 — 문자열 대소문자 변환 문제

python
def solution(s):
a = ""
for ch in s:
if ch.isupper():
a = a + ch.lower()
else:
a = a + ch.upper()
return a # 결과 문자열 반환
print(solution("aBcDeF")) # AbCdEf- 내가 본 다른 풀이(참고용) : 너무 어렵게 느껴졌다
이 과정을 돕기 위해, 저의 AI 페어 프로그래밍 파트너인 @채트에게 '설계 해설'을 요청했습니다. @채트는 이 코드의 구조를 다음과 같이 단계별로 알기 쉽게 분해해주었습니다.
1단계 (코드+주석+함수설명)
def solution(s):
answer = ''
# 1. 변환된 결과를 담을 '빈 문자열 answer' 준비
for ch in s:
# 2. 입력 문자열 s에서 문자 ch를 하나씩 꺼낸다.
if ch.isupper():
# 3. str.isupper() → 글자가 '대문자'인지 확인하는 메서드
# 대문자라면 True, 아니면 False 반환
answer += ch.lower()
# 3-1. str.lower() → 대문자를 소문자로 바꿔 반환
# 변환된 문자를 answer 뒤에 이어 붙인다.
else:
# 4. (그 외) ch가 소문자라면
answer += ch.upper()
# 4-1. str.upper() → 소문자를 대문자로 바꿔 반환
# 변환된 문자를 answer 뒤에 이어 붙인다.
return answer
# 5. 변환이 끝난 최종 문자열 answer 반환2단계 (주석+함수설명)
1. 변환된 결과를 담을 빈 문자열 answer를 준비한다.
2. 입력 문자열에서 문자를 하나씩 꺼낸다.
3. isupper()는 글자가 대문자인지 검사하는 메서드다.
- 만약 대문자라면, lower()를 사용해 소문자로 변환한다.
4. 그렇지 않으면 (즉 소문자라면), upper()를 사용해 대문자로 변환한다.
5. 변환된 글자를 answer에 이어 붙인다.
6. 최종적으로 answer를 반환한다.3단계 (분해설명+단계별쪼개기)
1단계: 문자열 하나씩 출력하기
s = "aBc"
for ch in s:
print(ch)👉 출력: a B c
2단계: 조건 확인 (대문자인지 소문자인지 출력)
s = "aBc"
for ch in s:
if ch.isupper():
print("대문자:", ch)
else:
print("소문자:", ch)3단계: 변환된 문자 누적하기
s = "aBc"
answer = ""
for ch in s:
if ch.isupper():
answer += ch.lower()
else:
answer += ch.upper()
print(answer)👉 출력: "AbC"
4단계: 함수로 감싸기
def solution(s):
answer = ""
for ch in s:
if ch.isupper():
answer += ch.lower()
else:
answer += ch.upper()
return answer
print(solution("aBcDeF")) # "AbCdEf"마치 신입사원에게 도면을 설명해주듯, @채트의 친절한 가이드 덕분에 코드의 전체적인 흐름을 이해할 수 있었습니다.👍

4) 오늘의 깨달음
- 아직 어렵지만, 막막함은 확실히 줄었습니다.
- 주석만 보고 코드를 다시 짤 수 있다는 건, 패턴을 손으로 익히고 있다는 증거입니다.
- 속도보다 구조에 집중하는 게 Python 학습에 더 적합하다고 확신했습니다.
5) 내일 할 일
- 프로그래머스 레벨0 문제 하나 더 ‘분해·재조립’ 훈련
- Daily Check에 배운 점/막힌 점/내일 계획 기록
👉 다음 포스팅에서는 잠시 코드를 떠나, 저의 주력 분야인 Revit으로 돌아가 '스마트한 부품(패밀리)'을 만드는 과정을 보여드리겠습니다. 코딩의 논리가 실제 3D 모델링에서 어떻게 구현되는지, 그 연결고리를 보여드릴 예정이니 기대해주세요.
Project_Aegis와 함께 성장하는 과정을 계속 공유하겠습니다.
- 마크다운 형식으로 작성은 해놓고 기본으로 발행을 했네요~ 수정했습니다.
'Project_Aegis > [Learning Log]' 카테고리의 다른 글
| 개발기 #2] 10시간 동안 저를 괴롭힌 GitHub Actions 오류, 3가지 패턴으로 완벽 정복했습니다 (0) | 2025.10.08 |
|---|---|
| [학습 일지 #001] GitHub Actions 동기화 오류, 10시간의 사투 끝에 얻은 교훈 (0) | 2025.09.03 |