정화 코딩

EDOC 2023-2 2회차 정모 본문

Group/EDOC

EDOC 2023-2 2회차 정모

jungh150c 2023. 9. 26. 01:34

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