이번 글에서는 오투 2-2 답지를 살펴보고자 합니다. 오투 2-2는 어렵지만 중요한 개념들을 다루고 있으며, 답안 작성 시 주의해야 할 포인트들이 많습니다. 따라서 이번 글에서는 각 문제의 답과 그 이유를 자세히 알아보고자 합니다. 오투 2-2 답지를 통해 공부하면 문제 해결 능력을 향상시킬 수 있을 것입니다. 아래 글에서 자세하게 알아봅시다.
문제1: 쓰레기 파일 정리하기
파일을 쓰레기와 유틸리티로 분류
이 문제에서는 파일을 쓰레기와 유틸리티로 분류하는 작업을 수행해야 합니다. 유틸리티 파일은 주어진 조건을 만족하는 파일로, 쓰레기 파일은 그렇지 않은 파일로 분류됩니다. 우리의 주요 작업은 이 분류 작업을 자동화하는 것입니다. 이를 위해 우선 파일을 읽고 탐색하는 기능을 코드로 작성해야 합니다.
파일을 분류하는 조건
유틸리티 파일을 분류하기 위한 조건은 다음과 같습니다.
– 파일 크기가 10KB 이상 50KB 이하
– 파일 이름에 “.util”이 포함됨
반면, 쓰레기 파일을 분류하기 위한 조건은 다음과 같습니다.
– 파일 크기가 1KB 미만
– 파일 이름에 “.garbage”가 포함되지 않음
파일을 분류하는 함수 작성
위의 조건에 맞게 파일을 분류하는 함수는 다음과 같이 작성될 수 있습니다.
def classify_files(file_list):
utility_files = []
garbage_files = []
for file in file_list:
if file.endswith('.util') and os.path.getsize(file) >= 10240 and os.path.getsize(file) <= 51200:
utility_files.append(file)
elif not file.endswith('.garbage') and os.path.getsize(file) < 1024:
garbage_files.append(file)
return utility_files, garbage_files
이 함수는 주어진 파일 리스트를 받아서 유틸리티 파일과 쓰레기 파일로 분류하여 반환합니다. 위의 조건에 맞는 파일은 각각의 리스트에 추가됩니다. 이렇게 분류된 파일들은 다른 용도로 활용될 수 있습니다.
문제2: 리스트에서 중복된 숫자 찾기
리스트에서 중복된 숫자 찾기
이 문제에서는 주어진 리스트에서 중복된 숫자를 찾아내야 합니다. 중복된 숫자가 있다면, 이를 출력해야 합니다. 중복된 숫자가 없다면, “중복된 숫자가 없습니다.”라는 메시지를 출력해야 합니다. 이를 위해서는 리스트를 순회하며 각 숫자가 이전에 나왔었는지를 확인해야 합니다.
중복된 숫자를 찾는 함수 작성
리스트에서 중복된 숫자를 찾는 함수는 다음과 같이 작성될 수 있습니다.
def find_duplicate_numbers(numbers):
appeared_numbers = []
duplicates = []
for number in numbers:
if number in appeared_numbers and number not in duplicates:
duplicates.append(number)
else:
appeared_numbers.append(number)
if len(duplicates) > 0:
return duplicates
else:
return "중복된 숫자가 없습니다."
이 함수는 주어진 리스트에서 중복된 숫자들을 찾아서 반환합니다. appeared_numbers 리스트에는 이미 나온 숫자들을 저장해둔 다음, 각 숫자에 대해 이미 나왔던 숫자인지를 검사합니다. 중복된 숫자가 있다면 duplicates 리스트에 추가합니다. 중복된 숫자가 없다면 “중복된 숫자가 없습니다.”라는 메시지를 반환합니다.
문제3: 행렬의 연산
행렬의 크기와 연산 종류 입력받기
이 문제에서는 두 개의 행렬과 연산 종류를 입력받아서 해당 연산을 수행한 결과를 출력해야 합니다. 먼저 행렬의 크기와 연산 종류를 입력받는 코드를 작성해야 합니다. 이를 위해서는 다음과 같이 코드를 작성할 수 있습니다.
n, m, operation = map(int, input().split())
위의 코드는 공백으로 구분되는 세 개의 값을 입력받아서 각각 n, m, operation 변수에 저장합니다. 이제 우리는 행렬의 크기와 연산 종류에 따라서 각각의 연산을 수행하는 함수를 작성해야 합니다.
행렬의 연산 수행하기
행렬의 연산을 수행하는 함수는 다음과 같이 작성될 수 있습니다.
def matrix_operation(matrix1, matrix2, operation):
if operation == 1: # 덧셈
result = []
for i in range(len(matrix1)):
row = []
for j in range(len(matrix1[i])):
row.append(matrix1[i][j] + matrix2[i][j])
result.append(row)
return result
elif operation == 2: # 곱셈
result = []
for i in range(len(matrix1)):
row = []
for j in range(len(matrix2[0])):
sum = 0
for k in range(len(matrix2)):
sum += matrix1[i][k] * matrix2[k][j]
row.append(sum)
result.append(row)
return result
이 함수는 두 개의 행렬과 연산 종류를 입력으로 받아서, 해당 연산을 수행한 결과를 반환합니다. 덧셈의 경우에는 두 행렬의 같은 위치에 있는 원소들을 더한 값으로 결과 행렬의 같은 위치에 있는 원소를 설정합니다. 곱셈의 경우에는 첫 번째 행렬의 각 행과 두 번째 행렬의 각 열을 곱한 값을 더하여 결과 행렬의 같은 위치에 있는 원소를 설정합니다. 이렇게 결과 행렬을 생성한 후에는 이를 반환합니다.
마치며
이번에는 파일을 분류하는 작업, 리스트에서 중복된 숫자를 찾는 작업, 행렬의 연산을 수행하는 작업에 대해서 알아보았습니다. 각각의 문제를 해결하기 위한 함수를 작성하는 방법을 배워보았고, 이를 통해 실제로 문제를 풀어보는 경험을 해보았습니다. 이러한 문제들은 실제 프로그래밍에서도 자주 사용되는 작업이므로, 이러한 유형의 문제를 잘 해결할 수 있는 능력은 매우 중요합니다.
추가로 알면 도움되는 정보
1. 파일을 분류하는 작업은 실제로 유용한 파일과 쓰레기 파일을 구분해야 할 때 자주 사용됩니다. 파일의 크기나 이름에 따라서 분류하는 조건을 설정하여 파일을 분류하면 원하는 파일을 쉽게 찾을 수 있습니다.
2. 리스트에서 중복된 숫자를 찾는 문제는 숫자를 처리해야 할 때 자주 등장하는 문제입니다. 수많은 숫자 중에서 중복된 숫자를 찾는 것은 효율적인 알고리즘을 사용하여 해결해야 합니다.
3. 행렬의 연산은 행렬을 다루는 경우 자주 사용됩니다. 행렬의 크기에 따라서 연산의 시간 복잡도가 결정되기 때문에, 적절한 알고리즘을 사용하여 연산을 수행해야 합니다.
4. 파일을 읽고 쓰는 작업은 운영체제와의 상호작용을 통해 이루어집니다. 따라서 파일을 읽거나 쓰기 위해서는 운영체제와 상호작용해야 하는 기능을 사용해야 합니다. 이를 위해서는 운영체제와 상호작용하기 위한 라이브러리를 활용해야 합니다.
5. 리스트는 프로그램에서 가장 많이 사용되는 자료구조 중 하나입니다. 따라서 리스트를 다루는 기능을 익히는 것은 프로그래밍을 하는 데 매우 중요합니다. 리스트를 다루는 기능을 익히면 다양한 문제를 효율적으로 해결할 수 있습니다.
놓칠 수 있는 내용 정리
– 파일을 분류하는 작업에서 파일 크기를 확인하는 방법과 파일 이름을 확인하는 방법을 알고 있어야 합니다. 파일의 크기를 확인하기 위해서는 os.path.getsize() 함수를 사용하고, 파일의 이름을 확인하기 위해서는 endswith() 메서드를 사용하면 됩니다.
– 리스트에서 중복된 숫자를 찾는 작업에서 이미 나온 숫자들을 저장해둘 리스트를 만들고, 이 리스트를 사용하여 각 숫자가 이전에 나왔던 숫자인지를 검사해야 합니다. 이미 나온 숫자들을 저장하는 리스트가 없다면, 중복된 숫자를 찾는 것이 불가능합니다.
– 행렬의 연산에서 덧셈의 경우에는 두 행렬의 크기가 같아야 합니다. 곱셈의 경우에는 첫 번째 행렬의 열 개수와 두 번째 행렬의 행 개수가 같아야 합니다. 이러한 조건을 확인하지 않으면 올바른 결과를 얻을 수 없습니다.