해설

개요

점검 2에서는 다양한 개념들을 활용하여 문제를 해결합니다. 문제 구성은 세 문제에 도전 문제 하나가 있고, 시간은 50분 주어집니다.

다른 라이브러리와 copilot는 금지합니다.

문제 1. 각 인덱스 값의 합 구하기

2차원 리스트 a가 주어져 있습니다. a의 각 원소는 서로 같은 길이의 1차원 리스트입니다. 이때, a의 원소들의 각 인덱스의 합을 print문으로 출력하는 프로그램을 만드세요.

# 입력이 다음과 같을 때 출력은 [12, 15, 18] 입니다.
a = [[1,2,3], [4,5,6], [7,8,9]]

# 입력이 다음과 같을 때 출력은 [19, 21] 입니다.
a = [[1,2], [4,5], [7,8], [3,6], [4,0]]

문제 2. 3N + 1 문제

3N + 1 문제는 자연수 n에서 시작하여 n이 짝수면 2로 나누고 홀수면 3을 곱한 뒤 1을 더하는 문제입니다. 이것을 계속 반복하게 되면 대부분 1로 수렴하게 되는데, 모든 자연수에 대해 1로 수렴하는지에 대해서는 아직 알려지지 않았습니다.

재귀함수를 이용하여 3N+1 문제를 구현합니다. 함수의 입력으로 자연수가 들어갔을 때, 1로 수렴하기까지 몇 step이 걸렸는지 그 값을 반환하는 함수를 작성하세요.

# 입력이 다음과 같을 때, 출력은 5 입니다.
print(func(5))

# 입력이 다음과 같을 때, 출력은 3 입니다.
print(func(8))

문제 3. 단어장

dictionary.txt에 다음과 같은 내용이 저장되어 있습니다. 아래 기능을 구현할 수 있는 함수를 만드세요.

사과 apple
바나나 banana
고양이 cat
드럼 drum
달걀 egg
*불 fire*

읽기

read_voca()를 통해 dictionary.txt를 읽고, 딕셔너리 voca에 key[한국어]-value[영어] 값들을 저장합니다.

쓰기

add_voca()를 통해 두 개의 입력 인수를 받습니다. dictionary.txt에 입력 인수를 저장하고, 딕셔너리 voca에 key-value 쌍을 하나 추가합니다.

# [읽기] 입력이 다음과 같을 때 출력은 apple입니다.
voca = read_voca()
print(voca["사과"])

# [쓰기] 입력이 다음과 같을 때, dictionary.txt에는 한 줄 더 추가되어야 합니다.
voca = add_voca("불", "fire")
print(voca["불"])  # -> fire 출력