✨ 2 Week - Python Coding Study
안녕하세요. hoyeon입니다.
본 포스팅은 <2024.09.23 ~ 2024.12.09> 기간의 코딩 스터디 2주차 학습 내용을 기록했습니다.
CodeHive Study 2주차 진행 (2024.09.30)
🗓️ 학습 주제
- K-MOOC의 ‘파이썬 프로그래밍’ 강의 수강
- 학습한 강의의 내용을 팀원과 공유하고, 각자가 이해한 내용을 발표하며 2차 복습 진행
- 리스트 & 딕셔너리 관련 백준(Baekjoon) 알고리즘 문제 풀이 및 코드 공유
- 간단한 발표 보고서 작성 & 팀원의 알고리즘 문제 풀이법 학습
📝 baekjoon 알고리즘 문제 풀이
9012 괄호 (실버 Ⅳ)
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다.
그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다.
한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다.
만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다.
그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다.
예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다.
한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다.
만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다.
그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다.
예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
입력:
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
출력: 출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.
출력: 출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.
📝 풀이 코드
n = int(input())
l = '('
r = ')'
for i in range(n):
new = []
ps = input()
for j in ps:
if j == l: new.append(l)
elif j == r:
if len(new) != 0: new.pop()
else:
print("NO")
break
else:
if len(new) != 0: print("NO")
else: print("YES")
🔍 문제 분석:
예를 들어 “(())”는 유효한 괄호 문자열이지만, “(()”나 “())”는 유효하지 않다.
‘(‘는 반드시 ‘)’와 짝을 이루어야 한다.
🔍 해결 전략:
- 문자열에서 여는 괄호 (를 만나면 스택에 추가하고, 닫는 괄호 )를 만나면 스택에서 가장 최근에 추가된 여는 괄호 (를 제거한다.
- 만약 닫는 괄호 )가 나왔을 때 스택에 여는 괄호가 없으면 (len(new) == 0), NO를 출력하고 검사 종료한다.
- 닫는 괄호가 나오는데 스택이 비어 있으면 바로 NO를 출력한다.
1075 나누기 (브론즈 Ⅱ)
문제
두 정수 N과 F가 주어진다.
지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다.
만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.
예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다.
N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.
입력: 첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.
출력: 첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.
지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다.
만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.
예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다.
N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.
입력: 첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.
출력: 첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.
📝 풀이 코드
n=int(input())
f=int(input())
number = (n // 100) * 100
mid = number%f
if mid == 0:
print('00')
else:
answer = f - mid
if answer < 10:
print(f'0{answer}')
elif answer == f:
print("00")
else:
print(answer)
🔍 해결 전략:
- n에서 가장 뒷 두 자리를 제거한 후 100을 곱해 100의 배수로 만든다.
- number % f를 계산하여 나머지(mid)를 구한다.
- 만약 mid == 0이면 추가 값이 필요 없으므로 출력값은 00
- 결과값을 두 자리 형태로 출력한다.
돌아가기: 2024 하반기 Python Coding Study