✨ 8 Week - Python Coding Study

안녕하세요. 소시지입니다.
본 포스팅은 <2024.09.23 ~ 2024.12.09> 기간의 코딩 스터디 8주차 학습 내용을 기록했습니다.

CodeHive Study 8주차 진행 (2024.11.18)

🗓️ 학습 주제

  1. 생활코딩 Python Django Web Framework 강의
  2. 학습한 강의의 내용을 팀원과 공유하고, 각자가 이해한 내용을 발표하며 2차 복습 진행
  3. 백준(Baekjoon) 알고리즘 문제 풀이 및 코드 공유
  4. 간단한 발표 보고서 작성 & 팀원의 알고리즘 문제 풀이법 학습


📝 baekjoon 알고리즘 문제 풀이

2920 음계 (브론즈 II)

문제:
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다.
이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력: 첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력: 첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.

</div>

📝 풀이 코드


note = list(map(int, input().split()))

if note == sorted(note):
    print("ascending")
elif note == sorted(note, reverse=True):
    print("descending")
else:
    print("mixed")
  

🔍 문제 분석:

8개의 음이 입력으로 주어질 때, 해당 음들이 오름차순(ascending), 내림차순(descending), 또는 혼합(mixed)인지 판단해야 한다.
입력 리스트가 정렬된 상태와 동일하면 “ascending”, 역순 정렬과 동일하면 “descending”을 출력한다.

🔍 해결 전략:

  • 입력 리스트를 sorted()를 사용해 오름차순으로 정렬한 결과와 비교하여 오름차순인지 판단한다.
  • sorted(note, reverse=True)로 정렬하여 내림차순 결과와 비교하여 내림차순인지 확인한다.
  • 두 조건에 모두 해당하지 않으면 “mixed”를 출력한다.

1676 팩토리얼 0의 개수 (실버 V)

문제

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력: 첫째 줄에 N이 주어진다.
출력: 첫째 줄에 구한 0의 개수를 출력한다.

📝 풀이 코드


n = int(input())
count = 0
while n >= 5:
    answer = n//5
    count += answer
    n = n//5

print(count)
  

🔍 문제 분석:

팩토리얼의 끝에 있는 0은 10의 배수에서 만들어지며, 10은 2와 5의 곱으로 이루어진다.
팩토리얼에서는 2의 배수보다 5의 배수가 적으므로, 5의 배수의 개수를 센다.

🔍 해결 전략:

  • n을 5로 나눈 몫을 구해 5의 배수가 몇 개 있는지 계산한다.
  • n을 계속 5로 나누며, 각 단계에서 몫을 누적하여 5, 25, 125, … 같은 더 큰 배수도 포함시킨다.
  • 반복문은 n이 5 이상일 때만 실행되며, n이 작아지면 종료되도록 한다.

1920 수 찾기 (실버Ⅳ)

문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력: 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다.
다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다.
다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다.
다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다.
모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력: M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

📝 풀이 코드


n = int(input())
numbers = set(map(int, input().split()))
m = int(input())
number_list= list(map(int, input().split()))

for number in number_list:
    print(1) if number in numbers else print(0)
  

🔍 문제 분석:

첫 번째 수열은 n개의 정수로 이루어져 있으며, 두 번째 수열은 m개의 정수로 이루어진다.

🔍 해결 전략:

  • 첫 번째 수열(numbers)을 집합(set) 자료형으로 변환한다.
  • 두 번째 수열(number_list)의 각 숫자를 순회하면서, 첫 번째 수열에 존재하는지 확인한다.
  • 각 숫자에 대해 존재하면 1, 아니면 0을 출력한다.

돌아가기: 2024 하반기 Python Coding Study