정화 코딩

EDOC 2023-2 1회차 정모 본문

Group/EDOC

EDOC 2023-2 1회차 정모

jungh150c 2023. 9. 19. 01:22

A. 정ㅋ벅ㅋ (백준 1237번)

 

https://www.acmicpc.net/problem/1237

 

#python

print("문제의 정답")

 

예전에 풀었었던... 킹받는 문제... 사실 예전에 내가 제출한 거 보고 풀었다,, ㅎㅎ (정답)

 


 

B. 소인수분해 (백준 11653번)

 

https://www.acmicpc.net/problem/11653

 

#python

from sys import stdin

n = int(stdin.readline())
num = 2

while n > 1:
    if n % num == 0:
        print(num)
        n = n // num
    else:
        num += 1

 

(정답)

 


 

C. 그룹 단어 체커 (백준 1316번)

 

https://www.acmicpc.net/problem/1316

 

#python

from sys import stdin

n = int(stdin.readline())
count = 0

for i in range(0, n):
    str = stdin.readline().strip()
    alpha = [0] * 26
    isGroup = True

    alpha[ord(str[0])-97] = 1

    for j in range(1, len(str)):
        if str[j] != str[j-1]:
            if alpha[ord(str[j])-97] == 0:
                alpha[ord(str[j])-97] = 1
            else:
                isGroup = False
                break

    if isGroup:
        count += 1

print(count)

 

뭔가 좀 간결하지 못하고 지저분하지만... 어쨋든 (정답)

 


 

D. 세 막대 (백준 14215번)

 

https://www.acmicpc.net/problem/14215

 

#python

from sys import stdin

a, b, c = map(int, stdin.readline().split())
max, min1, min2 = 0, 0, 0

if a >= b:
    if a >= c:
        max = a
        min1 = b
        min2 = c
    else: # a < b
        max = c
        min1 = a
        min2 = b
else: # a < b
    if b >= c:
        max = b
        min1 = a
        min2 = c
    else: # b < c
        max = c
        min1 = a
        min2 = b

while max >= min1 + min2:
    max -= 1

print(max + min1 +min2)

 


 

E. solved.ac (백준 18110번)

 

https://www.acmicpc.net/problem/18110

 

#python

from sys import stdin

n = int(stdin.readline())
data = []

if n == 0:
    print(0)
    exit()

for i in range(0, n):
    data.append(int(stdin.readline()))

data.sort()

exc = round(n * 0.15)
sum = 0

for i in range(exc, n-exc):
    sum += data[i]

avg = sum / (n - 2*exc)

print(round(avg))

 

(오답) 여기서 처음 알게 된 것. 반올림에는 여러 종류가 있는데, 사사오입과 오사오입이 그 중 일부이다. (둘의 차이는 찾아보긴 했으나 명확하게 이해하진 못했다...) 우리가 일반적으로 말하는 반올림은 사사오입이지만, 파이썬 내장 함수 round는 오사오입이다. 그렇기 때문에 round 함수를 쓰면 오답으로 뜬다. 

 

#python

from sys import stdin
import math

n = int(stdin.readline())
data = []

if n == 0:
    print(0)
    exit()

for i in range(0, n):
    data.append(int(stdin.readline()))

data.sort()

exc = math.floor(n * 0.15 + 0.5)
sum = 0

for i in range(exc, n-exc):
    sum += data[i]

avg = sum / (n - 2*exc)

print(math.floor(avg + 0.5))

 

파이썬에서 사사오입 반올림을 구현하는 여러 방법이 있다. 0.00001과 같이 작은 값을 더해주고 round 함수 사용하기, 0.5를 더하고 floor 함수를 사용하기, decimal 이용하기 등... 그 중 나는 0.5를 더해주고 floor 함수를 적용하는 방법을 사용했다. 참고로 round 함수는 따로 import할 필요가 없지만, floor 함수는 import math를 적어주어야 한다. (정답)

[참고] https://puleugo.tistory.com/43, https://hleecaster.com/python-round/

 


 

F. Z (백준 1074번)

 

https://www.acmicpc.net/problem/1074

 

(미해결)

 

'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 2회차 정모  (0) 2023.09.26
EDOC 2023-2 1주차 과제  (0) 2023.09.20
Comments