본문 바로가기

Algorithm/백준(BOJ)111

[ 파이썬(python) ] 백준 10546 - 배부른 마라토너 📍 백준 10546 - 배부른 마라토너 백준 10546 - 배부른 마라토너 ⚡️ 나의 풀이 저번에 풀었던 프로그래머스 - 완주하지 못한 선수 와 동일한 문제다. 참가자의 수가 100,000이기 때문에 기본적으로 list를 사용해서 풀면 시간 초과가 난다. 그래서 dict를 사용해서 풀었다. 참가자를 저장할 dict와 완주 선수를 저장할 dict를 defaultdict로 선언한다. defaultdict를 선언하면 동일 선수가 나와도 +1을 할 수 있기때문에 유용하게 사용할 수 있다. Counter 라이브러리로 참가자와 완주자의 Counter를 준다. 간단한 팁이지만 Counter끼리는 서로 빼거나 더할 수 있다. 남은 값의 key를 출력한다. 이런방식은 정답 판정을 받을 수 있으나, 메모리와 실행시간이 오.. 2021. 6. 29.
[ 파이썬(python) ] 백준 1620 - 나는야 포켓몬 마스터 이다솜 📍 백준 1620 - 나는야 포켓몬 마스터 이다솜 백준 1620 - 나는야 포켓몬 마스터 이다솜 ⚡️ 나의 풀이 포켓몬을 좋아해서 풀어봤다. 입력의 범위가 100,000까지로 주어져있기 때문에 리스트로 풀기에 시간 초과가 날 것 같아 dict의 hash를 이용하여 풀었다. (hash 접근 시간복잡도는 O(1)) dict에서 value의 값을 찾는것은 dict[key]를 넣으면 되기 때문에 비교적 쉬웠으나 반대로 key를 찾는것은 dict로는 찾을 수 없기 때문에 dict.keys()만을 뽑아 리스트로 만드는 list(dict.keys())를 사용했고, 여기서 몇 번째인지 알기 위해 인덱싱을 사용했다. 입력을 key:value 형태인 dict로 넣어준다.(이때, key는 포켓몬 이름, value는 입력 순.. 2021. 6. 28.
[ 파이썬(python) ] 백준 17608 - 막대기 📍 백준 17608 - 막대기 문제: 백준 17608 - 막대기 💡 나의 풀이 일렬로 세워진 막대기를 오른쪽에서 봐야 하기 때문에 막대기의 입력을 모두 받아 리스트로 만들고 문제를 풀었다. 처음에는 오답 판정을 받았는데 최대 높이의 막대기를 갱신해주지 않아서 그랬다. 첫번째 방법은 sticks인덱스를 거꾸로 확인하여 최대의 막대기를 갱신한 방법이고 두 번째 방법은 sticks를 pop()으로 하나씩 뽑아 최댓값을 갱신하는 방법을 사용했다. pop()을 사용한 방법의 실행시간이 약 30m/s정도 빨랐다. (사진에서 첫번째 방법은 하단, 두 번째 방법은 상단) # 첫번째 방법 import sys input = sys.stdin.readline n = int(input()) sticks = [int(input.. 2021. 6. 28.
[ 파이썬(python) ] 백준 1021 - 회전하는 큐 📌 백준 1021 - 회전하는 큐 백준 1021 - 회전하는 큐 💡 나의 풀이 처음에는 한 번에 2번 연산 혹은 3번 연산을 따로따로 진행하고 둘 중 작은 값을 출력하는 건 줄 알았는데, arr을 보고 더 가까운 쪽에 2번 연산, 3번 연산을 판단해서 풀어야 하는 문제였다. 머리로는 이해했는데 막상 구현하려니까 잘 떠오르지 않았다. 결국, 함수를 선언하여 풀었지만 왠지 코드가 많아 보였다. 현재 arr을 보고 target값을 앞 / 뒤에서부터 몇 번째 떨어져있는지 계산한 index를 return한다.(compare_min_length) 앞쪽이 더 가까우면 2번 연산을 진행한다.(front_rotate) 뒤쪽이 더 가까우면 3번 연산을 진행한다.(back_rotate) 다른 사람의 코드를 보니까 2, 3번.. 2021. 6. 27.
[ 파이썬(python) ] 백준 13335 - 트럭 📍 백준 13335 - 트럭 백준 13335 - 트럭 ⚡️ 나의 풀이 문제 분류는 시뮬레이션이었는데 실제로 일어날 수 있는 일을 코드로 구현 하니까 흥미로웠다. 또, 실버 1임에도 불구하고 문제가 어려웠는데 구현 조건이 생각보다 까다로웠기 때문이다. 문제흐름은 다음과 같다. 현재 다리(bridge)무게 + 넘어 올 트럭의 무게가 다리 하중보다 작으면 넘어 올 수 있고 그렇지 않으면 넘어 올 수 없다. 다리길이를 지난 트럭은 다리를 벗어난다.(pop) 이때, 현재 다리무게는 방금 다리를 벗어난 트럭의 무게를 빼줘야 한다. 다리에 트럭이 없을 때까지 반복한다. 1번 조건은 잘 생각했는데 2번 조건에서 트럭이 다리를 건너가고 나서 트럭의 무게만큼 현재 weight를 빼줄 생각을 못해서 오답판정을 받았다. 또한.. 2021. 6. 25.