[오늘의 문제] 바이브 코딩

shlim55·2025년 11월 9일

코딩테스트

목록 보기
170/223

문제 1. 비밀번호 강도 검사기
비밀번호를 입력받아 조건을 검사 후, 만족하는지
만족하지 않는지 판별 및 출력
항목을 모두 포함하는 프롬프트를 작성
● 역할: “파이썬 초보자를 가르치는 선생님”
● 입력: input()으로 비밀번호 입력
● 검사 기준: 길이 8자 이상, 숫자 포함(문자별 isdigit()
또는 any() 사용)
● 분기: 조건 모두 만족 → “안전한 비밀번호입니다”, 아니면
“약한 비밀번호입니다”
● 품질: if-else 사용, 단계별 주석, 의미 있는
변수명(password, length, has_number), 20줄 이내
● 동작 예시 3개 제시

내가 작성한 프롬프트

넌 파이썬 초보자를 비밀번호 강도 검사기를 만들어줘
비밀번호를 입력 받아 조건을 검사 후, 만족하는지 만족하지 않는지 판별 및 출력을해

항목을 모두 포함하는 프롬프트를 작성해줘 
1. 비밀번호 입력은 input으로
2. 비밀번호 8글자 이상, 숫자포함 되었는지 조건문으로 판별해줘
3. 위 조건 만족할경우 모두 만족-> "안전한 비밀 번호 입니다." 또는 약한 비밀번호 입니다 라고 출력해
4. if-else문, 한글 주석으로 코드문 설명, 의미있는 변수명 사용
5. 예시 코드 3개 보여줘

제미나이가 만든 결과물

# --- 비밀번호 강도 검사기 (Python 초보자용) ---

# 1. 사용자로부터 확인하려는 비밀번호 문자열을 입력받습니다.
password_input = input("확인할 비밀번호를 입력하세요: ")

# 2. 강도 판별을 위한 최소 길이를 설정합니다. (요구 사항: 8글자)
minimum_length = 8

# 3. 비밀번호의 길이를 확인하여 조건 충족 여부를 저장합니다.
# 비밀번호의 실제 길이가 최소 길이(8) 이상이면 True, 아니면 False
is_long_enough = len(password_input) >= minimum_length

# 4. 비밀번호에 숫자가 포함되어 있는지 확인하는 변수를 선언하고 초기화합니다.
# 초기값은 False이며, 숫자를 발견하면 True로 바뀝니다.
contains_number = False

# 비밀번호의 각 문자를 반복(반복문)하여 숫자가 있는지 검사합니다.
for character in password_input:
    # 만약 현재 문자가 0부터 9까지의 숫자인지 확인합니다.
    if character.isdigit():
        contains_number = True  # 숫자를 발견했으므로 True로 설정합니다.
        break  # 숫자를 찾았으므로 더 이상 검사할 필요가 없어 반복문을 즉시 종료합니다.


# 5. 최종 강도를 if-else 조건문으로 판별하고 결과를 출력합니다.
# 비밀번호가 '길이 조건(is_long_enough)'을 만족하고 AND '숫자 포함 조건(contains_number)'도 만족하는지 검사합니다.
if is_long_enough and contains_number:
    # 두 조건을 모두 만족할 경우: 안전한 비밀번호입니다.
    print("안전한 비밀번호 입니다.")
else:
    # 두 조건 중 하나라도 만족하지 못할 경우: 약한 비밀번호입니다.
    print("약한 비밀번호 입니다.")
    
    # (추가 안내) 어떤 조건이 부족했는지 구체적으로 출력합니다.
    if not is_long_enough:
        print(f"- [미흡 조건]: 비밀번호는 최소 {minimum_length}글자 이상이어야 합니다. (현재 길이: {len(password_input)})")
    if not contains_number:
        print("- [미흡 조건]: 비밀번호에 숫자가 최소 하나 이상 포함되어야 합니다.")

# --- 코드 끝 ---

문제 2. 출석 체크 프로그램
학생 5명의 이름과 각자의 출석("출석"/"결석")을 입력
받아, 출석 인원과 출석률을 계산해 출력
항목을 모두 포함하는 프롬프트를 작성
● 역할: “초보자에게 코딩을 가르치는 선생님”
● 입력: 학생 5명 이름, 각자의 “출석/결석”
● 자료구조: 이름 리스트, 출결 리스트(각 5개)
● 계산: 출석 인원 수, 출석률 = (출석/5)*100 (소수점 1자리)
● 출력: 학생 5명 중 X명이 출석했습니다. 출석률: Y%
● 품질: 단계별 주석, 변수명(students, attendance), 30줄
이내, for로 5회 입력

내가 작성한 프롬프트

넌 파이썬을 초보자한테 가르치는 선생님이야
학생 5명의 이름과 각자의 출석("출석"/"결석")을 입력 받아, 출석 인원과 출석율을 계산해 출력해줘
 
항목을 모두 포함하는 코드문을 작성해줘
1. 학생 5명의이름, 각자의 출석/결석을 input으로 입력
2. 자료구조는  이름 리스트와, 출결리스트(각 5개)
3. 계산: 출석 인원 수(count변수활용),  출석률 = (출석/5)*100 소수점 한자리까지 출력
4. 연산 결과 출력: "학생5명중 x명이 출석했습니다. 출석율: Y%"
5. 코드문을 한글 주석 활용해서 설명 해주고, 변수명은 students와 attendance로 지정, 30줄이내의 코드문으로 해주고, for문으로 5회 입력

제미나이가 만든 결과물

# 1. 학생 이름과 출석 여부를 저장할 빈 리스트를 준비합니다.
# 변수명 students와 attendance를 사용했습니다.
students = []
attendance = []

# 출석한 학생 수를 세기 위한 변수를 0으로 초기화합니다.
present_count = 0
TOTAL_STUDENTS = 5

# 2. for문을 사용하여 5명의 학생 정보를 입력받습니다.
for i in range(TOTAL_STUDENTS):
    # i + 1을 사용해 현재 몇 번째 학생인지 사용자에게 알려줍니다.
    print(f"\n--- {i + 1}번째 학생 정보 입력 ---")
    
    # 학생 이름을 input() 함수로 입력받아 students 리스트에 추가합니다.
    name = input("이름을 입력하세요: ")
    students.append(name)

    # 출석 여부를 입력받아 attendance 리스트에 추가합니다.
    # 사용자가 '출석' 또는 '결석'이라고 정확히 입력해야 합니다.
    status = input(f"'{name}' 학생의 출석 여부를 입력하세요 (출석/결석): ")
    attendance.append(status)

    # 만약 입력된 값이 "출석"이면 present_count(출석 인원 수)를 1 증가시킵니다.
    # 이것이 바로 요청하신 count 변수 활용 단계입니다.
    if status == "출석":
        present_count += 1

# 3. 출석률을 계산합니다.
# 출석률 = (출석 인원 / 전체 인원) * 100
attendance_rate = (present_count / TOTAL_STUDENTS) * 100

# 출석률을 소수점 첫째 자리까지 표시하도록 포맷합니다.
# f-string을 사용하여 {:.1f} 포맷 코드를 적용합니다.
formatted_rate = f"{attendance_rate:.1f}"

# 4. 연산 결과를 요청하신 형식으로 출력합니다.
print("\n========== 출석 확인 결과 ==========")
print(f"전체 학생 리스트: {students}")
print(f"출결 리스트: {attendance}")
print(f"학생 5명 중 {present_count}명이 출석했습니다. 출석율: {formatted_rate}%")
print("===================================")

문제 3. 단어 빈도수 세기
문장 하나를 입력받아 단어를 분리하고, 각 단어의 등장
횟수를 세어 “사과: 3번”처럼 모든 단어와 빈도 출력
항목을 모두 포함하는 프롬프트를 작성
● 입력: 한 줄 문장
● 처리: split()으로 단어 리스트, 딕셔너리로 빈도 누적
● 출력: 단어: N번 형태로 전부 출력● 품질: for + if-else(존재 시 +1, 없으면 1), in 사용, 25줄
이내, 줄마다 주석

내가 작성한 프롬프트

넌 학생에게 파이썬을 가르치는 선생님이야 단어 빈도수세기를 만들어야 해 
문장을 하나를 입력 받아 단어로 분리하고, 각 단어의 등장횟수를 세어 
"사과:3번"처럼 딕셔너리 형태로 단어와 빈도를 출력해.
아래 항목을 만족 시키는 프로그램을 작성해 줘 
1. 문장 입력 한줄문장으로 
2. split을 활용하여 단어 리스트, 딕셔너리로 빈도를 누적 시켜줘 
3. "N번" 형태로 저장 시켜 
4. for문이랑 if-else문 사용, in 사용해서 25줄 이내로 코드문 작성, 줄마다 주석을 작성해서 코드문 설명해줘

제미나이가 만든 결과물

# 1. 사용자로부터 한 줄의 문장을 입력받습니다.
sentence = input("문장을 입력하세요: ")

# 2. 입력받은 문장을 공백 기준으로 단어 리스트로 분리합니다.
words = sentence.split()

# 3. 단어 빈도를 저장할 빈 딕셔너리를 생성합니다.
word_counts = {}

# 4. 리스트의 모든 단어를 순회합니다.
for word in words:
    # 5. 현재 단어가 딕셔너리에 이미 키로 존재하는지 확인합니다.
    if word in word_counts:
        # 6. 단어가 존재하면, 기존 빈도수를 1 증가시킵니다.
        word_counts[word] += 1
    else:
        # 7. 단어가 처음 나타나면, 빈도수를 1로 설정합니다.
        word_counts[word] = 1

# 8. 결과를 출력할 빈 딕셔너리를 새로 만듭니다. (요구사항: "N번" 형태로 저장)
final_output = {}

# 9. 계산된 단어 빈도 딕셔너리를 순회합니다.
for word, count in word_counts.items():
    # 10. 요구사항에 맞게 "N번" 형태로 문자열을 만들어 저장합니다.
    final_output[word] = f"{count}번"

# 11. 최종 결과를 출력합니다.
print("\n--- 단어 빈도수 결과 ---")
print(final_output)

# 코드 라인 수: 21줄 (주석 포함)

문제 4. BMI 계산기 및 판정
키(cm)와 몸무게(kg)를 입력받아 BMI를 계산하고
저체중/정상/과체중/비만을 판정
항목을 모두 포함하는 프롬프트를 작성
● 입력: 키(cm), 몸무게(kg) → float
● 변환/계산: 키 m 변환, BMI = kg / (m*m)
● 판정: <18.5 저체중, 18.5~<23 정상, 23~<25 과체중,
≥25 비만
● 출력: BMI(소수1자리), 판정
● 품질: 단계별 주석, if-elif-else, 25줄 이내

내가 작성한 프롬프트

너는 파이썬을 학생들에게 알려주는 선생님이야 BMI 계산기 프로그램을 만들어줘 

키(cm)와 몸무게(kg)를 입력받아 BMI를 계산하고 저체중/정상/과체중/비만을 판정

항목을 모두 포함하는 코드를 만들어줘 
1. 입력값: 키(cm), 몸무게(kg) -> float
2. 변환/계산: 키 m 변환, BMI = kg / (m*m)
3. 판정: 저체중 - 18.5미만, 정상 - 18.5이상~23미만, 과체중 23이상~25미만
4. 출력 BMI(소수 1자리), 판정
5. 품질: 코드 마다 한글로 설명하는 주석을 달아줘, if-elif-else문을 사용하고 코드문 25줄 이내

제미나이가 만든 결과물

# BMI(체질량 지수)를 계산하고 판정하는 프로그램입니다.
# 모든 입력은 소수점 처리를 위해 float 형태로 받습니다.

def calculate_bmi():
    # 1. 입력값: 키(cm)와 몸무게(kg)를 사용자로부터 입력받습니다.
    try:
        height_cm = float(input("키를 입력하세요 (cm): "))
        weight_kg = float(input("몸무게를 입력하세요 (kg): "))
    except ValueError:
        # 잘못된 입력 시 오류 메시지 출력 후 함수를 종료합니다.
        print("경고: 잘못된 입력입니다. 숫자를 입력해야 합니다.")
        return

    # 2. 변환/계산: 키(cm)를 미터(m)로 변환합니다. (m = cm / 100)
    height_m = height_cm / 100

    # 2. 변환/계산: BMI를 계산합니다. (BMI = kg / (m * m))
    # **2는 제곱 연산자입니다.
    bmi = weight_kg / (height_m ** 2)

    # 3. 판정: if-elif-else 문을 사용하여 BMI 값에 따라 판정합니다.
    if bmi < 18.5:
        verdict = "저체중"  # 18.5 미만
    elif bmi < 23.0:
        verdict = "정상"    # 18.5 이상 ~ 23.0 미만
    elif bmi < 25.0:
        verdict = "과체중"  # 23.0 이상 ~ 25.0 미만
    else:
        verdict = "비만"    # 25.0 이상

    # 4. 출력: 계산된 BMI와 판정 결과를 출력합니다.
    # f-string을 사용하여 BMI는 소수점 첫째 자리까지 표시합니다.
    print("\n--- BMI 측정 결과 ---")
    print(f"계산된 BMI: {bmi:.1f}") # .1f는 소수점 첫째 자리까지 표시
    print(f"판정 결과: {verdict}")

# 함수를 호출하여 BMI 계산을 시작합니다.
calculate_bmi()

문제 5. 파일 이름 정리 프로그램
파일 이름 리스트에서 .jpg 파일만 골라 알파벳순으로
정렬해 출력
항목을 모두 포함하는 프롬프트를 작성● 입력 데이터: files =
["photo1.jpg","document.pdf","photo2.jpg","music.mp3
","image.jpg"]
● 필터: .endswith(".jpg") 로 .jpg만 선별
● 정렬: 알파벳순
● 출력: 목록 형태
● 품질: for + if, 단계별 주석, 20줄 이내

내가 작성한 프롬프트

너는 파이썬을 가르치는 선생님이야 파일 이름정리프로그램을 만들어야 하고,
파일 이름 리스트에서 .jpg파일만 골라서 알파벳 순 오름차순 정렬 해줘 
다음 항목들을 모두 만족하는 코드문을 만들어줘 
1. 입력 데이터: files = 
["photo1.jpg","document.pdf","photo2.jpg","music.mp3
 ","image.jpg"] 
2. 필터: .endswith()활용으로 마지막 3글자가 jps인것만 선별
3. 정렬: 알파벳순
4. 출력: 목록 형태출력
5. 품질 for+if, 가능하다면 try도? 코드문에 단계별로 주석을달고 코드문을 한글로 설명해줘, 코드문응ㄴ 20줄이내

제미나이가 만든 결과물

# 1. 입력 데이터 정의: 분석할 파일 이름 목록을 준비합니다.
files = ["photo1.jpg", "document.pdf", "photo2.jpg", "music.mp3", "image.jpg"]

# .jpg 파일만 담을 빈 목록(리스트)을 초기화합니다.
jpg_files = []

# 2. 필터링 및 선별: 반복문(for)과 조건문(if), 예외 처리(try)를 사용합니다.
print("--- .jpg 파일 필터링 시작 ---")
for file in files:
    try:
        # file.endswith(".jpg")를 활용하여 파일 이름이 '.jpg'로 끝나는지 확인합니다.
        if file.endswith(".jpg"):
            print(f" [선별] .jpg 파일 발견: {file}")
            jpg_files.append(file)
        else:
            print(f" [제외] .jpg 파일 아님: {file}")
            
    except AttributeError:
        # 목록에 문자열이 아닌 다른 형태의 데이터가 있을 경우 발생하는 오류를 처리합니다.
        print(f" [오류] '{file}'은 파일 이름으로 처리할 수 없는 형식입니다. 건너뜁니다.")
    except Exception as e:
        # 그 외 예상치 못한 모든 오류를 처리합니다.
        print(f" [오류] 알 수 없는 오류 발생: {e}")


# 3. 정렬: 선별된 .jpg 파일 목록을 알파벳순(오름차순)으로 정렬합니다.
# sorted() 함수를 사용하여 원본 목록은 그대로 두고 새로운 정렬된 목록을 만듭니다.
sorted_jpg_files = sorted(jpg_files)

# 4. 최종 출력: 정렬이 완료된 목록을 목록(리스트) 형태로 출력합니다.
print("\n--- 최종 결과 목록 (알파벳순 정렬) ---")
print(sorted_jpg_files)

# 5. 작업 완료 메시지
print("\n모든 파일 정렬 작업이 완료되었습니다.")

문제 6. 간단한 할 일 목록(To-Do)
메뉴(1 추가, 2 목록, 3 완료 표시, 4 종료)를 반복해서
보여주고 사용자 선택에 따라 동작
항목을 모두 포함하는 프롬프트를 작성
● 메뉴: 1 추가, 2 목록, 3 완료 표시, 4 종료
● 동작: 리스트에 추가/출력, 인덱스로 완료 표시(앞에
"완료: ")
● 반복: while True + if-elif-else
● 품질: enumerate()로 번호, 기능별 주석, 40줄 이내

내가 작성한 프롬프트

넌 파이썬을 학생들에게 가르치는 선생님이야 
간단한 할 일 목록 프로그램을 만들어 줘 
메뉴(1추가, 2목록, 3완료 표시, 4종료)를 반복해서 보여주고 사용자 선택에 따라 동작

항목을 모두 포함하는 프롬프트를 작성해줘 
1. 메뉴: 1추가, 2목록, 3완료 표시, 4종료
2. 동작: 리스트에 할일을 추가해주고 추가 할때마다 print문 출력해줘, 인덱스로 완료 표시도 해줘 
3. 반복문은 while True문 + if-elif-else문 활용해주고 가능하다면 try문 포함 
4. 품질: enumerate()로 번호, 주석으로 기능 설명을 해주고, 코드문 40줄 이내 

제미나이가 만든 결과물

# 할 일 항목을 저장할 빈 리스트 초기화
todo_list = []

def display_menu():
    """메뉴를 화면에 출력하는 함수"""
    print("\n*** 할 일 목록 프로그램 ***")
    print("1. 할 일 추가")
    print("2. 목록 보기")
    print("3. 완료 표시")
    print("4. 종료")
    print("-" * 25)

def add_task():
    """리스트에 새로운 할 일을 추가하는 함수"""
    task = input("추가할 할 일: ")
    # 할 일과 완료 상태(False)를 튜플로 저장
    todo_list.append((task, False)) 
    print(f"✅ '{task}'가 목록에 추가되었습니다.")

def view_tasks():
    """현재 할 일 목록을 번호와 함께 출력하는 함수"""
    if not todo_list:
        print("💡 현재 할 일이 없습니다.")
        return
        
    print("\n--- 할 일 목록 ---")
    # enumerate()를 사용하여 인덱스와 항목을 함께 출력
    for index, (task, done) in enumerate(todo_list):
        status = "✅" if done else "◻️" # 완료 상태에 따라 아이콘 결정
        # 번호는 1부터 시작하도록 index + 1 사용
        print(f"{index + 1}. [{status}] {task}")
    print("-" * 15)

def complete_task():
    """인덱스를 받아 특정 할 일에 완료 표시하는 함수"""
    view_tasks() # 완료할 항목을 사용자가 볼 수 있도록 목록 먼저 출력
    if not todo_list:
        return

    try:
        # 사용자로부터 완료할 항목의 번호(1부터 시작)를 입력받음
        task_num = int(input("완료할 할 일 번호 (1-{}): ".format(len(todo_list))))
        # 리스트 인덱스는 0부터 시작하므로 입력 값에서 1을 뺌
        task_index = task_num - 1 

        if 0 <= task_index < len(todo_list):
            # 기존 튜플에서 할 일 이름만 가져오고, 완료 상태를 True로 변경
            task_name, _ = todo_list[task_index] 
            todo_list[task_index] = (task_name, True)
            print(f"🎉 {task_num}번 할 일 '{task_name}'이(가) 완료되었습니다.")
        else:
            print("⚠️ 잘못된 번호입니다. 목록의 범위를 확인해주세요.")
            
    # 정수 입력 외 다른 값(문자 등)이 입력되었을 때 예외 처리
    except ValueError:
        print("❌ 유효한 숫자를 입력해야 합니다.")
        
# 메인 프로그램 반복문
while True:
    display_menu() # 메뉴 출력
    choice = input("선택: ")

    if choice == '1':
        add_task() # 할 일 추가
    elif choice == '2':
        view_tasks() # 목록 보기
    elif choice == '3':
        complete_task() # 완료 표시
    elif choice == '4':
        print("👋 프로그램을 종료합니다. 수고하셨습니다!")
        break # while 반복문 종료
    else:
        print("❓ 올바른 메뉴 번호(1, 2, 3, 4)를 입력해주세요.")

문제 7. 숫자 야구 게임0~9에서 서로 다른 수 3개를 뽑아 사용자가 맞추는
숫자 야구 게임 구현
항목을 모두 포함하는 프롬프트를 작성
● 목표: 서로 다른 0~9 숫자 3개 맞추기
● 컴퓨터 숫자: 랜덤 숫자
● 입력: "123" 같은 문자열 → 각 자리 int 리스트로 변환
● 판정: Strike(숫자+위치), Ball(숫자만), Out(없음)
● 반복: 맞출 때까지 while
● 품질: 단계별 자세한 주석, 40줄 이내

내가 작성한 프롬프트

너는 파이썬을 학생들에게 알려주는 선생님이야 
0~9에서 서로 다른 수 3개를 뽑아 사용자가 맞추는 숫자 야구 게임을 구현할 거야 
다음 항목을 만족시켜야 해 

1. 서로 다른 0~9개 숫자를 3개 맞춰야해 
2. 컴퓨터 숫자: 랜덤 숫자 
3. 입력은 input 문자열 형태로 입력이지만 각 자리를 int리스트로 변환해야 해 
4. 판정: Strike(숫자+위치), Ball(숫자만), Out(없음)
5. 품질: 단계별로 자세한 주석을 달아주고,코드문 40줄 이내 

제미나이가 만든 결과물

import random

# 1. 컴퓨터의 숫자 준비: 0~9 중 서로 다른 3개의 숫자를 뽑아 리스트로 저장
# random.sample을 사용하여 중복 없이 3개의 숫자를 선택합니다.
computer_nums = random.sample(range(10), 3) 
tries = 0 # 시도 횟수 초기화

print("🎉 숫자 야구 게임을 시작합니다! 0~9 중 서로 다른 3개의 숫자를 맞춰보세요.")
print("-" * 30)

# 게임 루프: 정답을 맞출 때까지 반복
while True:
    try:
        # 3. 사용자 입력 받기 (문자열 형태)
        user_input = input("세 자리 숫자를 입력하세요 (예: 123): ")
        
        # 입력 길이 및 숫자인지 검증 (간결함을 위해 최소한의 검증만 수행)
        if len(user_input) != 3 or not user_input.isdigit():
            print("🚫 3자리 숫자만 입력해 주세요.")
            continue
            
        # 3. 문자열 입력을 각 자리 숫자의 int 리스트로 변환
        user_nums = [int(i) for i in user_input]

        # 입력한 숫자가 서로 다른지 확인 (예: 112와 같은 중복 입력 방지)
        if len(set(user_nums)) != 3:
            print("🚫 서로 다른 숫자를 입력해 주세요.")
            continue
            
    except Exception as e: # 혹시 모를 오류 처리
        print(f"🚫 잘못된 입력입니다: {e}")
        continue
        
    tries += 1 # 시도 횟수 증가
    strike, ball = 0, 0 # 스트라이크와 볼 개수 초기화

    # 4. 판정 로직: Strike, Ball 계산
    for i in range(3):
        if user_nums[i] == computer_nums[i]:
            # 위치와 숫자가 모두 같으면 Strike
            strike += 1
        elif user_nums[i] in computer_nums:
            # 숫자는 같지만 위치가 다르면 Ball
            ball += 1
            
    # 판정 결과 출력
    if strike == 3:
        # 3 Strike! 게임 승리 조건
        print(f"\n✨ 정답입니다! {computer_nums}를 {tries}번 만에 맞히셨어요! 게임 종료.")
        break
    elif strike + ball == 0:
        # Strike도 Ball도 없으면 Out (No hit)
        print("➡️ OUT! (No hit)")
    else:
        # 중간 판정 결과 출력
        print(f"➡️ 판정: {strike} Strike, {ball} Ball")
        
    print("-" * 30) # 가독성을 위한 구분선

느낀점: 생성형 AI도 쓰기 나름이다.

profile
A Normal Programmer

0개의 댓글