BOJ (28) 썸네일형 리스트형 [백준/Python]14719 빗물 ' 벽과 벽 사이의 빈 공간에는 무조건 빗물이 채워질 수 있다 '는 아이디어로 작성하게 된 코드이다 2차원 세계에 블록이 쌓여있는 것을 표현한 world 라는 2차원 리스트를 만들었고, 한 줄 씩 돌면서 빗물이 채워질 수 있는 공간의 크기를 구했다 H, W = map(int, input().split()) block = [int(i) for i in input().split()] world = [[0] * W for _ in range(H)] for i in range(W): for j in range(block[i]): world[j][i]= 1 answer = 0 for i in range(H): start = False water = 0 for j in range(W): if world[i][j] .. [백준/Python] 1205 등수 구하기 구현은 쉽게 했는데, 계속 틀렸다고 나옴;;; 아직도 뭐가 문제인지 모르겠어서 구글링 했다.... 에휴.........; 그리고 처음에 비오름차순이 내림차순이라는 뜻인지 아님 sorting이 안되어 있다는 뜻인지 헷갈렸다;; n, s, p = map(int, input().split()) if n == 0: print(1) else: scores = [int(i) for i in input().split()] if n == p and scores[-1] >= s: print(-1) else: rank = n + 1 for i in range(n): if scores[i] [백준/Python] 20055 컨베이어 벨트 위의 로봇 ※ 이 풀이법은 PyPy3으로 통과된 방법으로, Python3으로는 '시간 초과'가 뜨는 코드입니다 개인적인 "구현 연습"을 위해 외부 라이브러리 사용 없이 빡구현 한 코드입니다. deque의 rotate를 사용하면 회전하는 컨베이어 벨트를 바로 만들 수 있었겠지만, 구현 연습을 위해 직접 구현했다. 또한 0의 개수를 셀 때도, count 함수를 사용하지 않고 직접 구현했다. 문제에서 주어진 컨베이어 벨트 작동 순서는 크게 3가지로, 1. 회전하고 2. 이동하고 3. 올린다 를 내구도의 0 개수가 K개 이상이 될 때까지 반복 라고 생각할 수 있다. 위의 세 과정을 모두 지나야 한 단계를 지났다고 생각한다. 따라서, 회전 / 이동 / 올림 을 각각 구현하고, 내구도 0의 개수를 세는 과정을 순서대로 구현했.. [백준/Python] 20006 랭킹전 대기열 특별한 알고리즘 없이 써있는 대로 구현하는 문제이다. 고려해야할 부분은 두 가지라고 생각하는데 1. 입력된 순서대로 게임을 시작한다 → for문으로 입력으로 차례로 받아서 바로바로 방에 넣어줘야함 2. 닉네임은 사전 순으로 출력된다 → 마지막에 sorting 해주기 1번 때문에 모든 입력을 한 번에 받은 후 레벨을 기준으로 정렬해 m명 씩 나눠 출력할 수 없다는 뜻이다. 그렇다면 어떻게 문제를 간단히 생각할 수 있을까? 핵심 아이디어는 다음과 같다. 처음 방에 들어간 사람의 레벨과 비교해 -10 [백준/Python] 2852 NBA 농구 처음에 생각을 잘못 해서 틀려서 두 번째 시도에서 성공했다. 처음에 생각하지 못한 경우는 팀1이 우세하다가 팀2가 우세하고 다시 팀1이 우세하면서 엎치락 뒤치락할 수 있다는 것을 생각 못했다. 예제에 나와있는 한 팀이 우세한 뒤 다른 한 팀이 우세하면 끝난다고 생각해서 여러번의 '이기는 시간'의 누적을 구할 수 없었다 그래서 작성했던 모든 코드를 지우고 다시 코드를 작성하기 시작했는데, 처음에는 시간을 mm:ss 형태로 계산했던 것이 너무 복잡해서 그냥 다 초로 바꾼 뒤에 마지막에 누적 시간을 다시 주어진 형식(mm:ss)으로 바꿔주었다. 고려해야할 사항은 1) 각 팀의 점수(이기고 있는 팀의 시간을 누적) 2) 팀 각각의 누적시간을 구함 이라고 생각했고, 나는 이 문제를 "지금 어떤 팀이 이기고 있는지.. [백준/Python] 1224 스위치 켜고 끄기 너무 잘 풀었는데 자꾸 '틀렸다'고 나와서 너무 마음이 아팠다.. 대략적인 구현은 쉬워서 한번에 술술 적었는데, 예외 처리 해줘야하는 부분을 못 찾아서 계속 틀림....ㅜ 문제에서 대놓고 말해주지 않는 예외를 찾는 것은 아직 너무 어렵다;ㅅ; (맞았습니다 많은 건, 함수로 풀어보고 싶어서 이것 저것 시도한 흔적입니다,,~) 일단 문제를 간단히 요약하면, 남자 → n 배수 스위치 누르기 여자 → 대칭: 5개 모두 스위치 누르기 → 비대칭: n만 스위치 누르기 이렇게 간단하게 요약할 수 있다. def boy(n): for i in range(1, (N // n) + 1): if switch[(n * i) - 1] == 1: switch[(n * i) - 1] = 0 else: switch[(n * i) - .. [백준/Python] 1138 한 줄로 서기 처음에 생각했던 방법은 처음 나온 0의 인덱스를 제일 처음에 놓고, 그 다시 people을 처음부터 끝까지 돌면서 자기보다 작은 숫자가 몇개 있나 세서, 그 수랑 people에 있는 수가 같은 수의 인덱스를 두번째에 놓고··· 하는 방법이었는데, 뭔소린지 모르시겠죠? 당연함.. 나도 모르겠음ㅠ 암튼 그래서 인덱스랑 자기보다 큰 사람이 왼쪽에 몇명있는지를 dictionary로 해서 해보려고 했어요,, 근데 아무리 생각해도 계속 비교하느라고 for문을 돌면 너무 시간이 오래 걸릴 거 같은 거에요 그래서 막 이진탐색을 해? 그럼 sorting을 해야돼? 이렇게까지? 이러면서 삽질 오지게 하다가 결국 구글링을 했어요^^ 3시간만에^^ 진짜 혼자 풀어보고 싶었는데......^^ㅎ; 대략적인 아이디어는 앞 번호부터.. [백준/Python] 1475 방 번호 처음에 세트를 어떻게 세야할까 생각하는게 어려웠다.. 그냥 한 번에 생각났으면 바로 풀 수 있는 문젠데, 자꾸 어렵게 생각하다보니까 이상한 곳에서 쓸 데 없이 시간을 많이 쓴 기분...ㅠ check = [0] * 10 for i in input(): check[int(i)] += 1 sn = check[6] + check[9] if sn % 2 == 0: check[6], check[9] = sn // 2, sn // 2 else: check[6], check[9] = sn // 2 + 1, sn // 2 + 1 print(max(check)) 풀이과정 1. 0이 10개 있는 check라는 배열을 만들기 2. 방 번호를 하나씩 받아서 해당하는 배열에 +1 ( ex_방번호가 678이라면, check[6],.. 이전 1 2 3 4 다음