반응형
브론즈1 랜덤디펜스
문제 설명 : 적혀있는 예시만 보면 이해하기 어려울 수도 있는데 1로 시작하면 1 > 11 > 12 > 23 > 35 > 58 > 83 > 31
이런 식으로 진행된다.
내 코드 :
cycle = 0
first = input()
num = first
big = 0
while True: # while True:
if int(num) < 10:
num = str(int(num) * 10 + int(num))
elif int(num[0]) + int(num[1]) < 10: # 50
num = num[1] + str(int(num[0]) + int(num[1])) # num = 0 + 5
elif int(num[0]) + int(num[1]) >= 10:
big = str(int(num[0]) + int(num[1])) # == 10
num = str(int(num[1])) + str(int(big[1])) # == 50
cycle += 1
if int(str(num)) == int(first):
print(cycle)
break
처음에 받은 수를 기억하고 있어야하지만 그 수를 변형시키면서 코드가 진행되야 하기에 num = first로
num에 처음에 받은 수를 저장했다. 처음 받은 수가 10 미만인지 아닌지로 조건문을 구분해서 달았다.
if int(num) < 10:
여기에서 안 걸렸으면 10이상이라는 소리니까
int(num[0]) + int(num[1])
이렇게 num[1]을 구해도 인덱스 에러가 나지 않는다.
어떤 경우에는 문자열의 더하기 방식을 사용해야 하고 어떤 경우에는 그냥 덧셈 연산을 해야해서
int랑 str 함수를 야무지게 사용해야 했다.
마지막 줄에
if int(str(num)) == int(first):
이렇게 안하고 str함수로 감싸놓기만 하면 00이랑 0을 다른 숫자로 인식해버리기 때문에 반드시 int를 사용해야한다.
문제 설명보다는 예시를 보는게 좋을 것 같다.(절대 귀찮아서 이러는거 맞음)
내 코드
import sys
t = int(input())
for i in range(t):
over = 0
data = list(map(int, sys.stdin.readline().split()))
average = sum(data[1:]) / (len(data) - 1)
for ii in range(1, len(data)):
if data[ii] > average:
over += 1
a = (over / (len(data) - 1)) * 100
b = str(round(a, 3))
ind = b.index(".")
while len(b) - ind < 4:
b = b + "0"
print(b, "%", sep="")
풀이 : 겁나 쉬워보이지만 입력의 첫번째 값은 평균을 낼 때 빼야하므로 슬라이싱을 적절히 사용해줘야 했다.
average = sum(data[1:]) / (len(data) - 1)
(그래서 평균낼 때 이렇게 함)
제일 짜증나는 부분은 무조건 40%도 40.000% 이렇게 소수점 3번째 자리까지 출력시키는 부분이였다.
나는 출력해야할 결과물을 b에 str로 저장하고 소수점의 인덱스를 ind에 저장한 뒤
while len(b) - ind < 4:
b = b + "0"
이렇게 소수점 자리수를 맞춰줬다.
반응형
'WINK-(Web & App) > 개인 스터디 & 프로젝트' 카테고리의 다른 글
알고리즘 2인 스터디 #5주차 - 박성훈 (0) | 2023.08.16 |
---|---|
알고리즘 2인 스터디 #3주차 - 박성훈 (0) | 2023.08.01 |
알고리즘 2인 스터디 #2주차 - 박성훈 (1) | 2023.07.25 |
알고리즘 2인 스터디 #2주차 - 이총명 (0) | 2023.07.25 |
[알고리즘 개인 스터디] 2주차: DP 문제 풀이(11722, 15486) - 윤현승 (0) | 2023.07.22 |