실버 23

[백준/알고리즘/python/java] 2852번 - NBA 농구

해당 문제는 NBA 농구 경기에서 특정 팀이 얼마나 오랫동안 리드했는지를 계산하는 문제입니다. 이 문제를 풀 때는 득점 순서, 득점 시간, 현재 리드 상태를 정확히 추적하는 것이 중요합니다. 문제를 딱 봤을 때, 뭔가 "득점이 성공된 시간 순서"대로 "1팀과 2팀 중에 어떤 팀이 넣었는지" 알아야 할 것 같습니다. 그리고, 득점을 함으로써 앞서가는지 혹은 동점이 됐는지도 체크"해야 하는 것이 중요합니다. 동점이 된 순간부터는 어느 팀도 리드하지 않는 상태가 되기 때문입니다. 이렇게, 주의할 점은 아래와 같이 요약할 수 있겠습니다. 경기 시간 처리 : 경기 시간은 "시:분" 형식으로 주어지며, 이를 총 분으로 변환해야 합니다. 상태 관리 : 경기의 현재 상태(동점, 팀1 리드, 팀2 리드)를 추적해야 합니..

모각코 2회차 - 약점체크

모각코 두번째 회의 후 PART2. 약점체크를 풀며 준비운동을 했습니다! 확실히 저번주보다는 난의도가 높은 문제들인 것을 체감했습니다. ✏️ 준비운동 PART2. 약점체크 재귀 탐색의 기본: 연산자 끼워넣기 (🥈실버 1티어) 스택의 응용: 괄호의 값 (🥈실버 2티어) 시뮬레이션 기본: 빗물 (🥇 골드 5티어) 완전탐색의 유연한 생각: 가르침 (🥇 골드 4티어) 그리디의 기본: 멀티탭 스케줄링 (🥇 골드 1티어) 투 포인터의 기본: 부분합 (🥇골드 4티어) 벨만포드 뼈대문제: 최소비용 구하기 (🥇 골드 5티어) Prime, Kruskal 뼈대문제: 최소 스패닝 트리 (🥇 골드 4티어) KMP 뼈대문제: 부분 문자열 (🥉 브론즈 2티어) 위상정렬: 줄 세우기 (🥇 골드 3티어) 1. 연산자 끼워넣기 impo..

모각코 1회차 - 준비운동

모각코 첫번째 회의 후 PART1. 튼튼한 기본기를 풀며 준비운동을 했습니다! 쉬운 문제를 풀며 자신감도 올리고 기본적인 문법을 복기하기 좋았습니다. ㅎㅎ ✏️ 준비운동 PART1. 튼튼한 기본기 약수 구하기 (🥉 브론즈 3티어) 이진수 (🥉 브론즈 3티어) 최소, 최대 (🥉 브론즈 3티어) 지능형 기차 2 (🥉 브론즈 3티어) 피보나치 수 5 (🥉 브론즈 2티어) 일곱 난쟁이 (🥉 브론즈 2티어) 최대공약수와 최소공배수 (🥈실버 5티어) N번째 큰 수 (🥈실버 5티어) 소수 찾기 (🥈실버 4티어) 쉽게 푸는 문제 (🥈실버 4티어) 소수 (🥈실버 4티어) 1. 약수 구하기 import sys input = sys.stdin.readline N, K = map(int,input().split()) answ..

[백준/알고리즘/python/java] 11723번 - 집합

비교적 쉬운 문제이지만, strip()을 안해서 처음에 index오류가 났고, 2 all check 20 했을 때, 1이 나와야 하는데 0이 나와서 계속 왜 안될까 고민하다가, number라는 입력받은 숫자를 int로 변환하지 않아서 check를 할 때 이상값이 나왔다. discard도 remove와는 다르게, 해당 값이 없으면 remove는 오류를 출력하지만, discard는 해당 값이 있을 때만 없애주고, 없으면 무시한다. 코드는 아래와 같다. import sys input = sys.stdin.readline M = int(input()) queue = set() for _ in range(M): in_put = input().rstrip() if in_put == "all": queue.updat..

[백준/알고리즘/python/java] 5464번 - 주차장

차근차근 문제에서 주어진 로직을 풀어보면, 그다지 어렵지 않은 문제였다. 문제의 로직은 따로 설명하게 없을 정도로, 문제에서 주어진 대로 그대로 구현하면 다들 풀 수 있을 것이다. 처음 입력받는 N과 M은 각각 '주차장 공간의 수'와 '차량의 수'이다. 모든 차량은 한 번씩 주차장에 들어갔다가 나오므로 (차량의 수 *2) 만큼의 출입 순서를 입력받아야 했다. 우선 index오류를 막기 위해, '요금을 나타내는 리스트'와 '각 차량의 무게를 나타내는 리스트'를 빈 리스트 [] 가 아닌 [0]으로 시작했다. 들어오는 출입 순서를 덱으로 큐화 시켰다. popleft()를 쓰기 위함이다. 이 출입리스트가 빌 때 까지, 계산을 반복한다. 이 문제에서 생각해야 할 관건은 크게 2가지만 생각해주면 됐다. 주차 가능한..

[백준/알고리즘/python/java] 1535번 - 안녕

일단, 나도 처음에 틀렸던 문제다. 그리디 문제로 접근을 했었고, 문제를 풀었는데, '예제 입력 5' 와 같은 반례에 부딪혔다. 나의 로직은 이러했다. 문제에서 1번 사람부터 N번 사람까지 순서대로 잃는 체력리스트와 얻는 기쁨 리스트를 입력받는다. 세준이가 얻을 수 있는 최대 기쁨을 출력하는 것이므로, [hp(체력), joy(기쁨)]을 쌍으로 갖는 새로운 리스트를 만든 후에, joy(기쁨)을 기준으로 내림차순 정렬을 한다. 그러면, 큰 joy(기쁨)를 가지는 쌍이 앞에 오겠고 해당하는 hp(체력)을 초기 HP(100)에서 빼가면서 음수나 0이 아니면, 해당 joy(기쁨)을 그대로 더해주면서 for문을 순회하도록 로직을 짰다. 처음에 짠 로직은 아래와 같다. import sys input = sys.std..

[백준/알고리즘/python/java] 1417번 - 국회의원 선거

정답률이 낮은 이유는 아마 제출 수가 적은 것도 그렇지만, 예외처리 때문일 것이다. 나도 한 2번 틀리고 반례를 발견했으니 말이다. 우선, 시간제한도 2초로 넉넉한 편이어서 for문이나 while문 사용에 거부감이 없었다. 이번 코드리뷰는 내가 제출했었던 코드들을 순차적으로 살펴보자. 맨 처음 제출해서 틀렸던 코드는 아래와 같다. import sys input = sys.stdin.readline n = int(input()) vote_list = [] count = 0 for i in range(n): vote_list.append(int(input())) dasom = vote_list[0] not_dasom = sorted(vote_list[1:], reverse=True) print(not_das..

[백준/알고리즘/python/java] 18870번 - 좌표 압축

이 문제도 처음에 시간제한에 걸려서 시간초과가 났었던 문제이다. 로직은 간단한데, 시간초과가 났다면, 분명 어떤 라이브러리를 사용하는 것이거나 더 효율적인 자료구조가 있는 것이다. 방법을 고수하지말고 바꿔야 하는 것을 명심하자. 문제마다 어떤 자료구조로 풀어야 효과적인지 판단하는 것도 중요한 것 같다. 맨 처음 풀었던 코드는 아래와 같다. import sys input = sys.stdin.readline N = int(input()) number_list = [int(num) for num in input().split()] sorted_number_list = sorted(number_list) for i in number_list: order = 0 seen = -1 for j in sorted_n..

[백준/알고리즘/python/java] 1764번 - 듣보잡

정답 비율이 높지 않아서, 뭔가 시간초과와 관련된 문제이겠거니 싶었다. 역시나 처음 풀었던 코드는 시간초과에 걸렸다. 아래는 처음 시간초과에 걸렸던 코드이다. import sys import collections input = sys.stdin.readline a, b = map(int, input().split()) answer = [] no_heard = [input().strip() for i in range(a)] no_seen = [input().strip() for i in range(b)] if a < b: for word in no_heard: if(word in no_seen): answer.append(word) else: for word in no_seen: if(word in no_..

[백준/알고리즘/python/java] 2164번 - 카드2

맨 처음에 시간초과가 났던 코드였다. 심지어 PyPy3로도 시간초과가 났었다. 로직은 단순한데, 시간초과가 났다면 다른 라이브러리의 힘을 빌려야 하는 순간이다. 기존 리스트로 카드 세트를 생성하고 처음엔 remove나 del 함수를 사용했지만, 단순히 pop 함수를 사용해도 되는데, 파이썬의 list는 중간에 있는 요소를 pop할 때 시간복잡도가 O(n)이지만, collections.deque는 시간복잡도가 O(1) 라고 한다. 먼저 맨 처음에 작성했던 코드는 아래와 같다. import sys input = sys.stdin.readline n = int(input()) card_list = [] for i in range(n, 0, -1): card_list.append(i) while(len(card..

반응형