백준 2822번 - 점수 계산 - Python

문제를 똑바로 읽자! 점수 오름차순인지, 아니면 순서 오름차순인지, 숫자 오름차순인지에 따라서 헤맬 수 있는 여지가 많아진다! 나머지는 간단했던 문제. # 2822 import operator score = {} total = 0 answer = [] for i in range(8): n = int(input()) score[n]=i+1 final = sorted(score.items(), key=operator.itemgetter(0))[3:] for a, b in final: total += a answer.append(str(b)) print(total) print(' '.join(sorted(answer)))

2024-8-20 · 1 min · 56 words · Junha

백준 1531번 - 투명 - Python

먼저 문제를 잘 읽는것부터 어려웠다. 숫자들이 각 타일을 말하는 것인지, 모서리의 좌표를 말하는 것인지 파악해야했고, 좌표이기 때문에 일대일대응을 이용해서 타일의 갯수를 구해내야했다. 그보다 어려웠던 것은, 자꾸만 pic의 모든 줄들이 같은 값을 보여주길래 의문이 들었다. 그 이유는 값을 복사하느냐와 그 값을 지칭하는 주소를 복사하느냐의 차이였다. [값과 값의 주소](https://www.acmicpc.net/board/view/97946 참고)를 참고해보면 친절한 답변을 확인할 수 있다. pic = [[0]*100 for _ in range(100)]와 같은 방식으로 선언해야지, pic = [[0]*100]*100와 같이 선언해버리면 주소만 복사하기 때문에 행들이 모두 동일해진다는 문제가 있었던 것이다. ...

2024-8-19 · 1 min · 132 words · Junha

백준 1769번 - 3의 배수 - Python

쉽게 풀릴 것 같던 문제였지만, 시간 초과에 빠져버렸다.. 이런.. 아마도 각 자리 숫자를 더하는 과정에서 시간이 오래걸리는 듯하다. PS에서 시간 초과가 가장 답답한 듯하다. 터미널에서는 순식간에 구해지는 것들이 사이트 상에서는 느리다고 하니까. 일단 Python에서 Pypy로 바꾸어 제출했고, while문에서 len(n) == 1처럼 len()을 이용하여 한자릿수인지 체크를 했다. int(n)<10보다 len()이 시간적으로 효율적이다. n = input() count = 0 while True: if len(n) == 1: break count += 1 temp = 0 for i in range(len(n)): temp += int(n[i]) n = str(temp) if len(n) == 1: break print(count) if n in ['3','6','9']: print("YES") else: print("NO")

2024-8-19 · 1 min · 92 words · Junha

백준 1384번 - 메시지 - Python

다 풀어놓고 마지막에 ‘개행’ 추가 안해서 10분 헤매었던 문제. print('\n')을 출력하는게 아닌, print('')을 출력해야 한줄만 띄워진다. \n을 사용하고 싶다면 다른 출력문과 같이 한번에 사용해야한다. # 1384 num = 1 while True: n = int(input()) names = [] badword = [] if n == 0: break if num>1: print("") print(f"Group {num}") num += 1 for i in range(n): message = input().split() names.append(message[0]) for j in range(1,n): if message[j] == 'N': badword.append((i,j)) if len(badword) == 0: print("Nobody was nasty") else: for b in badword: A = (b[0] - b[1])%n B = b[0] print(f"{names[A]} was nasty about {names[B]}")

2024-8-17 · 1 min · 95 words · Junha

백준 1340번 - 연도 진행바 - Python

datetime을 이용할 수도 있겠지만, 알고리즘 연습이니 라이브러리 없이 풀어내는걸 목표로 했다. days에 월별로 날짜수를 저장해둔 뒤에, 윤년 처리를 해주고 분 단위로 1년 대비 현재 진행 시간을 알아내었다. 하루 차이가 나길래 어디서 오류가 나는지 찾느라 은근 시간이 걸렸던 문제. # 1340 days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] months = {'January':1, 'February':2, 'March':3, 'April':4, 'May':5, 'June':6, 'July':7, 'August':8, 'September':9, 'October':10, 'November':11, 'December':12} month, day, year, time = input().split() month = months[month] day = int(day[:-1]) year = int(year) si, bum = map(int, time.split(':')) if year%400==0 or (year%4==0 and year%100!=0): days[1] += 1 now=0 total=sum(days)*24*60 now += sum(days[:(month-1)])*24*60 now += (day-1)*24*60 now += si*60 now += bum print(now/total*100) datetime을 이용한 풀이 datetime 라이브러리에서 datetime를 불러온 뒤에 주어진 date_str을 date_format에 따라 parsed_datetime을 얻어낸다. 그 뒤엔 parsed_datetime뒤에 .year .month 같은 식으로 int 값을 얻어낼 수 있다. 나머지 과정은 동일하다. ...

2024-8-13 · 2 min · 227 words · Junha