✨ 3 Week - Python Coding Study
안녕하세요. 소시지입니다.
본 포스팅은 <2024.09.23 ~ 2024.12.09> 기간의 코딩 스터디 3주차 학습 내용을 기록했습니다.
CodeHive Study 3주차 진행 (2024.10.07)
🗓️ 학습 주제
- K-MOOC의 ‘파이썬 프로그래밍’ 강의 수강
- 학습한 강의의 내용을 팀원과 공유하고, 각자가 이해한 내용을 발표하며 2차 복습 진행
- 반복문 & 함수 관련 백준(Baekjoon) 알고리즘 문제 풀이 및 코드 공유
- 간단한 발표 보고서 작성 & 팀원의 알고리즘 문제 풀이법 학습
📝 baekjoon 알고리즘 문제 풀이
1138 한 줄로 서기 (실버Ⅱ)
문제:
N명의 사람들은 매일 아침 한 줄로 선다.
이 사람들은 자리를 마음대로 서지 못하고 오민식의 지시대로 선다.
어느 날 사람들은 오민식이 사람들이 줄 서는 위치를 기록해 놓는다는 것을 알았다.
그리고 아침에 자기가 기록해 놓은 것과 사람들이 줄을 선 위치가 맞는지 확인한다.
사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다.
N명의 사람이 있고, 사람들의 키는 1부터 N까지 모두 다르다.
각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 출력하는 프로그램을 작성하시오.
입력 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다.
출력 첫째 줄에 줄을 선 순서대로 키를 출력한다.
N명의 사람들은 매일 아침 한 줄로 선다.
이 사람들은 자리를 마음대로 서지 못하고 오민식의 지시대로 선다.
어느 날 사람들은 오민식이 사람들이 줄 서는 위치를 기록해 놓는다는 것을 알았다.
그리고 아침에 자기가 기록해 놓은 것과 사람들이 줄을 선 위치가 맞는지 확인한다.
사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다.
N명의 사람이 있고, 사람들의 키는 1부터 N까지 모두 다르다.
각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 출력하는 프로그램을 작성하시오.
입력 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다.
출력 첫째 줄에 줄을 선 순서대로 키를 출력한다.
📝 풀이 코드
N = int(input())
N_list = list(map(int, input().split()))
people = [0] * N
result_list = []
for i, num in enumerate(N_list):
tmp = num
person = 0
for j in range(N):
if person == tmp and people[j] == 0:
people[j] = i+1
break
elif people[j] == 0:
person += 1
print(*people)
🔍 문제 분석:
사람이 줄을 설 때 자신의 앞에 키가 더 큰 사람이 몇 명 있는지를 나타낸다.
각 사람을 줄에 세우고, 최종적으로 줄을 선 사람들의 순서를 출력해야 한다.
🔍 해결 전략:
- people 배열을 초기화하여 0으로 세팅.
- 각 사람(i번 사람)이 자신 앞에 원하는 num만큼의 빈 자리가 있어야만 자신의 자리를 선택할 수 있다.
- 변수 tmp는 num(자신 앞에 더 큰 사람 수)을 카운트하며, 조건에 맞는 자리에 i+1을 배치한다.
2525 오븐 시계 (브론즈Ⅲ)
문제
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
📝 풀이 코드
a,b=map(int, input().split())
c=int(input())
total_minutes = b + c
print((a+total_minutes//60)%24, total_minutes%60)
🔍 문제 분석:
현재 시간과 조리 시간을 입력받아, 24시간 형식으로 조리가 끝나는 시각을 계산한다.
시간을 계산할 때, 60분 = 1시간, 24시간 = 하루의 관계를 유지해야 하므로,
현재 분 b와 조리 시간 c를 합산한 결과가 60분 이상일 경우, 초과된 분만큼 시간을 추가해야 한다.
최종 시각은 24시간 형식이므로 a가 24 이상일 경우 24로 나눈 나머지를 계산한다.
🔍 해결 전략:
- 총 분 계산: 현재 분 b와 조리 시간 c를 합산해 total_minutes를 구한다.
- 시간과 분 분리: total_minutes를 나눠 추가된 시간(total_minutes // 60)과 남은 분(total_minutes % 60)을 구한다.
- 24시간 형식 조정: 현재 시간 a에 추가 시간을 더한 뒤, (a + 추가 시간) % 24로 24시간 형식에 맞춘다.
1037 약수 (브론즈 Ⅰ)
문제
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
입력: 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
출력: 첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
입력: 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
출력: 첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
📝 풀이 코드
n=int(input())
answer=list(map(int, input().split()))
print(min(answer)*max(answer))
🔍 문제 분석:
- 약수의 개수 n과 약수 리스트를 기반으로 원래 수 N을 계산해야 한다.
- 약수의 특징: 가장 작은 약수와 가장 큰 약수를 곱해 원래 수 N을 구한다.
🔍 해결 전략:
- 약수 중 가장 작은 값과 가장 큰 값을 찾는다.
- 원래 수 계산: 최소값과 최대값을 곱하면 원래 수 N이 된다.
- min()과 max()를 사용해 간결하게 계산하자.
돌아가기: 2024 하반기 Python Coding Study