본문 바로가기

파이썬

(39)
[백준/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] ..
[Programmers/Python] 이모티콘 할인행사 프로그래머스 문제 간단히 생각하기 1. 할인율은 10%, 20%, 30%, 40% 이고, 2. 사용자는 각각 '최소 할인율'과 '최대 구매 가능 금액' 을 가지고 있습니다. 3. 사용자는 이모티콘를 구매하거나, 이모티콘 플러스에 가입할 수 있는데, 4. 3번에 대한 기준은, '최소 할인율' 이상의 할인율을 적용시켜 구매한 이모티콘의 가격이 4-1. '최대 구매 가능 금액' 미만인 경우, 이모티콘 구매하고, 4-2. '최대 구매 가능 금액' 이상인 경우, 이모티콘 플러스 가입 5. 이모티콘 플러스 가입자가 최대인 경우 중, 판매액을 최대로 하는 경우의 이모티콘플러스 가입자수와 판매액을 출력 해야할 일 1. 각 이모티콘에 대해 적용할 할인율의 경우의 수를 구합니다. 2. 각 할인율을..
[Programmers/Python] 신규 아이디 추천 프로그래머스 Lv1.인만큼 어렵지 않은 문제였고, 문제에 주어진 단계를 그대로 구현하면 되는 문제였다. def solution(new_id): answer = '' # 1단계 new_id = new_id.lower() # 2단계 for id in new_id: if id.isalpha() or id.isdigit() or id in '-_.': answer += id # 3단계 while '..' in answer: answer = answer.replace('..', '.') # 4단계 if answer[0] == '.' and len(answer)>1: answer = answer[1:] if answer[-1] == '.': answer = answer[:-1] # 5단계 ..
[백준/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) - ..