✨ 6 Week - Python Coding Study
안녕하세요. 소시지입니다.
본 포스팅은 <2024.09.23 ~ 2024.12.09> 기간의 코딩 스터디 6주차 학습 내용을 기록했습니다.
CodeHive Study 6주차 진행 (2024.11.04)
🗓️ 학습 주제
- 생활코딩 Python Django Web Framework 강의
- 학습한 강의의 내용을 팀원과 공유하고, 각자가 이해한 내용을 발표하며 2차 복습 진행
- 백준(Baekjoon) 알고리즘 문제 풀이 및 코드 공유
- 간단한 발표 보고서 작성 & 팀원의 알고리즘 문제 풀이법 학습
📝 baekjoon 알고리즘 문제 풀이
11650 좌표 정렬하기 (실버Ⅴ)
문제:
2차원 평면 위의 점 N개가 주어진다.
좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다.
둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다.
(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력: 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
2차원 평면 위의 점 N개가 주어진다.
좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다.
둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다.
(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력: 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
📝 풀이 코드
n=int(input())
dot_list = []
for _ in range(n):
x,y = map(int, input().split())
dot_list.append([x,y])
dot_list.sort(key=lambda a: (a[0],a[1]))
for dot in dot_list:
print(dot[0],dot[1])
🔍 문제 분석:
x좌표를 기준으로 오름차순 정렬해야 한다.
만약 x좌표가 같다면, y좌표를 기준으로 오름차순 정렬해야 한다.
입력값은 n개의 점으로 이루어지며, 각 점은 x, y 좌표가 공백으로 구분되어 있다.
🔍 해결 전략:
- 입력받은 좌표를 리스트에 저장하며, 각 점을 [x, y] 형태로 구성한다.
- 리스트의 정렬 기준을 설정하기 위해 sort 함수에서 key=lambda a: (a[0], a[1])를 사용한다.
- 정렬 기준은 첫 번째로 x좌표, 두 번째로 y좌표를 오름차순으로 지정한다.
1978 소수 찾기 (브론즈II)`
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력: 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다.
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력: 주어진 수들 중 소수의 개수를 출력한다.
입력: 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다.
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력: 주어진 수들 중 소수의 개수를 출력한다.
📝 풀이 코드
n = int(input())
num_list = list(map(int, input().split()))
answer = 0
for i in num_list:
count = 0
if i == 1:
continue
for j in range(2,i+1):
if i%j == 0:
count += 1
if count == 1:
answer += 1
print(answer)
🔍 문제 분석:
소수는 1과 자기 자신만을 약수로 가지는 숫자이다.
🔍 해결 전략:
먼저 입력값으로 주어진 숫자 목록을 num_list에 저장한다.
1은 제외하고, 2부터 그 숫자 자체까지 나누어지지 않는지 체크하여 소수인지 판별한다.
소수의 개수를 세기 위해 각 숫자에 대해 나누어지는 수가 2개인 경우(자기 자신과 1)만 소수로 판단한다.
10773 제로 (실버Ⅳ)
문제
나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.
재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.
재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.
재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!
입력: 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.
정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
출력: 재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.
재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.
재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.
재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!
입력: 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.
정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
출력: 재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.
📝 풀이 코드
k = int(input())
number_list = []
for i in range(k):
number = int(input())
number_list.append(number)
if number == 0:
number_list.pop()
del number_list[-1]
print(sum(number_list))
🔍 문제 분석:
0이 아닌 숫자는 number_list에 계속 추가되고, 0이 입력되면 마지막에 추가된 숫자를 제거해야 한다.
0이 입력될 때마다 가장 최근에 입력된 숫자를 제거해야 한다.
🔍 해결 전략:
append로 숫자를 추가하고, 0이 입력되면 pop과 del을 사용해 최근 숫자를 제거한다.
모든 숫자를 처리한 후, 리스트에 남아있는 숫자들의 합을 sum()을 사용하여 출력한다.
돌아가기: 2024 하반기 Python Coding Study