전체 글
-
백준 9506번 (리스트)백준 with Python 2022. 12. 26. 19:28
리스트의 초기화, 리스트 맨 뒤에 차례로 요소 넣기, 리스트의 합 쉽게 구하기 등을 공부해보았다. while True: n= int(input()) if n==-1: break x=[] for i in range(1, n): if n%i==0: x.append(i) # 리스트의 맨 뒤에 i를 넣어줌 if sum(x)==n: # 이렇게 리스트의 합을 바로 끌어낼 수 있음 print(f'{n} =', end=' ') print(x[0], end=' ') for i in range(1, len(x)): print('+', x[i], end=' ') print('') else: print(n, 'is NOT perfect.')
-
백준 8958번 (리스트와 반복)백준 with Python 2022. 12. 26. 18:50
리스트로 받아 리스트 요소를 하나씩 검사하며 앞 쪽 리스트 요소와 비교하며 점수를 올리는 방식으로 풀어냈다. T= int(input()) for i in range(T): x=list(input()) ser=0 if x[0]=='O': score=1 ser=1 else: score=0 for j in range(1, len(x)): if x[j]=='O': if x[j-1]=='O': ser=ser+1 else: ser=1 score=score+ser print(score) 하지만 리스트를 횡단할 때 for j in range(1, len(x))로 굳이 하지 않고 더 깔끔하게 풀어내는 법을 공부했다. 물론 내가 풀어낸 방식에서는 앞 쪽 요소와 비교하는 구문이 들어가기 때문에 방식을 조금 바꿔야 한다. T..
-
백준 2754번 (딕셔너리)백준 with Python 2022. 12. 25. 14:58
S= input() if S=='A+': print(4.3) elif S=='A0': print(4.0) elif S=='A-': print(3.7) elif S=='B+': print(3.3) elif S=='B0': print(3.0) elif S=='B-': print(2.7) elif S=='C+': print(2.3) elif S=='C0': print(2.0) elif S=='C-': print(1.7) elif S=='D+': print(1.3) elif S=='D0': print(1.0) elif S=='D-': print(0.7) elif S=='F': print(0.0) 단순반복문으로 풀 수 있다. 파이썬에는 C와 달리 switch가 없다고 한다. 다른 방법들은 검색해본 결과 딕셔너리를..
-
백준 2476번 (a==b==c와 max())백준 with Python 2022. 12. 24. 19:41
N=int(input()) max=0 for i in range(N): a, b, c= map(int, input().split()) if a==b and a==c: x=10000+a*1000 elif a==b: x=1000+a*100 elif a==c: x=1000+a*100 elif b==c: x=1000+b*100 else: if a>b and a>c: x=a*100 elif b>a and b>c: x=b*100 else: x=c*100 if x>max: max=x print(max) 다음과 같이 했더니 너무 지저분해서 더 깔끔하게 비교하는 법을 공부했다. max()함수를 이용해서 최대값을 깔끔하게 구할 수 있었다. c와 달리 파이썬은 a==b==c를 인식했다. N=int(input()) ans=0..
-
백준 1934번 (최대공약수와 최소공배수)백준 with Python 2022. 12. 23. 16:13
T= int(input()) for i in range(T): A, B= map(int, input().split()) if A>=B: j=A while(True): if j%A==0 and j%B==0: print(j) break j=j+1 else: j=B while(True): if j%A==0 and j%B==0: print(j) break j=j+1 처음에는 입력받은 A, B중에서 큰 수를 찾아 그 수에서 1씩 더하며 공배수인지 찾는 알고리즘을 짰다. 하지만 시간초과를 받게 되어 새로운 방법을 공부해보았다. 수학적으로 두 숫자의 최대 공약수는 (둘 중에 작은 수)와 (큰 수에서 작은 수를 나눈 나머지)와의 최대 공약수와 같다고한다. 정확히 말하면 작은 수가 0이 될 때까지 반복해서 최대 공약수를..
-
백준 2675번 (출력 줄넘김)백준 with Python 2022. 12. 22. 21:26
T= int(input()) #테스트케이스 입력 for i in range(1, T+1): #T만큼 반복 R, S= input().split() #숫자와 문자열을 받아 띄어쓰기 기준으로 나눠서 배분 R= int(R) #R을 정수형으로 변환 S= list(S) #S는 문자열을 리스트로 L=len(S) #S리스트 크기 계산 for j in range(0, L): #리스트S의 크기만큼 반복 print(S[j]*R, end='') #S의 문자들을 R만큼반복해서 출력해주는데, 붙여서 출력하기 위해 ,end=''삽입 print('') #마지막에는 줄넘김을 해줘야하기 때문에 반복문 뒤에 줄바꿈용
-
백준 5355번 (리스트의 크기와 소수점 출력)백준 with Python 2022. 12. 22. 21:10
T= int(input()) for i in range(1, T+1): X= input().split() L= len(X) Y= float(X[0]) for j in range(1,L): if X[j]=='@': Y=Y*3 elif X[j]=='%': Y=Y+5 elif X[j]=='#': Y=Y-7 print('%.2f' %Y) 리스트의 크기를 측정하고 싶을 때는 len(리스트)를 이용하면 된다. 원하는 소수점까지 출력하고 싶을 때는 round(실수,원하는 소수점 자릿수)를 이용하면 된다. 문제는 이렇게 하니 소수점 둘째 자리까지 없는 실수(3.8같은)가 나오면 round(Y,2)를 하면 3.80 이렇게 안나오고 그냥 3.8이렇게 나오는 것이었다. 그래서 다른 방식의 소수점 출력 방식을 사용했다. pr..
-
백준 2530번: 인공지능 시계백준 with Python 2022. 12. 21. 21:46
처음에는 반복문을 이용해 간단한 알고리즘으로 해결하려 했다. H, M, S= map(int, input().split()) X= int(input()) S= S+X while S>=60: S-=60 M+=1 while M>=60: M-=60 H+=1 while H>=24: H-24 print(H, M, S) 하지만 이렇게 제출하니 시간초과 실패 판정을 받았다. X가 크게 주어졌을 때 반복이 너무 많이 이루어지는 것이 문제였다. H, M, S= map(int, input().split()) X= int(input()) S= S+X S1, S= divmod(S, 60) M=M+S1 M1, M= divmod(M, 60) H=H+M1 H=H%24 print(H, M, S) 몫과 나머지를 이용해서 시간을 줄였다.