Notice
Recent Posts
Link
정화 코딩
EDOC 2023-2 2회차 정모 본문
A. 알고리즘 수업 - 알고리즘의 수행 시간 1 (백준 24262번)
https://www.acmicpc.net/problem/24262
#python
print("1\n0")
당연히 from sys import stdin을 쓰고 있었는데... 생각해보니 수행 횟수가 입력값에 영향을 받지 않아서 입력이 사실상 필요가 없는... 어이없는 문제. (정답)
B. 색종이 (백준 2563번)
https://www.acmicpc.net/problem/2563
#python
from sys import stdin
paper = [[0] * 100 for _ in range(100)]
n = int(stdin.readline())
count = 0
for i in range(0, n):
x, y = map(int, stdin.readline().split())
for j in range(x, x+10):
for k in range(y, y+10):
if ((j < 100) and (k < 100)):
paper[j][k] = 1
for j in range(0, 100):
for k in range(0, 100):
if (paper[j][k] == 1):
count += 1
print(count)
전체 값이 100*100으로 크지가 않아서 그냥 100*100 크기의 리스트를 만들어 1로 색칠된 칸을 표시하고 세어주었다. (정답)
C. 듣보잡 (백준 1764번)
https://www.acmicpc.net/problem/1764
#python
from sys import stdin
n, m = map(int, stdin.readline().split())
notHeard = []
notSeen = []
for _ in range(0, n):
notHeard.append(stdin.readline().strip())
for _ in range(0, m):
notSeen.append(stdin.readline().strip())
ansSet = (set(notHeard) & set(notSeen))
ans = sorted(list(ansSet))
print(len(ans))
for i in range(0, len(ans)):
print(ans[i])
대충 코드는 짰는데 자꾸 뭔가 조금씩 이상해서 왜 그럴까 끙끙대고 있었는데, 지영언니가 파이썬에 있는 set을 이용하면 쉽게 풀 수 있다고 알려줘서 그 방법으로 풀었다! (정답)
#python
from sys import stdin
n, m = map(int, stdin.readline().split())
notHeard = []
notSeen = []
ans = []
for _ in range(0, n):
notHeard.append(stdin.readline().strip())
for _ in range(0, m):
notSeen.append(stdin.readline().strip())
notHeard = sorted(notHeard)
notSeen = sorted(notSeen)
hIndex = 0
sIndex = 0
while (hIndex < n) & (sIndex < m):
if (notHeard[hIndex] == notSeen[sIndex]):
ans.append(notHeard[hIndex])
hIndex += 1
sIndex += 1
else:
if (notHeard[hIndex] > notSeen[sIndex]):
sIndex += 1
else:
hIndex += 1
print(len(ans))
for i in range(0, len(ans)):
print(ans[i])
집에 와서 원래 시도했던 코드를 수정해서 문제를 해결했다. 오빠의 도움과 함께..ㅎㅎ (정답)
D. 숫자 카드 2 (백준 10816번)
https://www.acmicpc.net/problem/10816
#python
from sys import stdin
from bisect import bisect_left, bisect_right
n = int(stdin.readline())
sang = list(map(int, stdin.readline().split()))
m = int(stdin.readline())
card = list(map(int, stdin.readline().split()))
sang.sort()
for i in range(0, m):
print(bisect_right(sang, card[i]) - bisect_left(sang, card[i]), end = " ")
저번에 풀었던 이진탐색을 이용한 풀이. (정답)
#python
from sys import stdin
n = int(stdin.readline())
sang = list(map(int, stdin.readline().split()))
m = int(stdin.readline())
card = list(map(int, stdin.readline().split()))
count = {}
for i in sang:
if i in count:
count[i] += 1
else:
count[i] = 1
for i in card:
if i in count:
print(count[i], end = " ")
else:
print(0, end = " ")
저번에 풀었던 딕셔너리(해시)를 이용한 풀이. (정답) 이전에 풀었을 때는 뭔가 이해가 명료하게 안 되는 느낌이었는데, 다시 푸니까 훨씬 더 잘 이해되는 느낌이었다. 이런 느낌 아주 좋아.. 후후.
'Group > EDOC' 카테고리의 다른 글
EDOC 2023-2 3주차 과제 (0) | 2023.10.07 |
---|---|
EDOC 2023-2 3회차 정모 (0) | 2023.10.02 |
EDOC 2023-2 2주차 과제 (0) | 2023.09.26 |
EDOC 2023-2 1주차 과제 (0) | 2023.09.20 |
EDOC 2023-2 1회차 정모 (0) | 2023.09.19 |
Comments