컴퓨터 공부/📚 Baekjoon(백준) 36

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

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

[백준/알고리즘/python/java] 11000번 - 강의실 배정

작년에 풀었던 문제인데, 제대로 이해를 하지 않고 넘어갔었던 느낌이 들어 다시 풀어본 문제이다. 거의 기억이 안나서 새로 푼 문제나 다름이 없었는데, 총 3번의 시련을 겪었다. 가장 먼저, 잘못된 로직으로 문제를 풀어나가기 시작했다. 예를 들어, 입력값이 3 1 98 98 99 99 100 이 주어졌다고 하면, 답은 어떻게 나올까? 답은 3이 나와야 한다고 생각한다면, 나와 똑같은 실수를 한 셈이다. 답은 1이 나와야 한다. 1~98 , 98~99, 99~100 이렇게 겹치지 않고, 1강의실만을 이용해서 강의를 배정할 수 있기 때문이다. 첫 번째 시련을 겪고, 빠르게 로직에 대해서 생각해봤다. 대충 로직은 이러했다. 입력 받은 "강의가 시작되는 시간"과 "강의가 끝나는 시간"을 강의 리스트를 (강의 시작..

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

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

[백준/알고리즘/python/java] 16428번 - A/B - 3

이미지를 누르면 문제링크를 보실 수 있습니다. 굉장히 단순한 문제인데, 정답률이 그에 비해선 막 높진 않아서 풀어본 문제다. 처음엔 나 역시 틀렸다. 다시한번, 써가면서 풀어봤는데, 특징이 있었다. A가 나누어지는 수이고 B가 나누는 수라고 할 때, 1) 단순히 A, B둘다 양수라고 생각하면, 몫은 A//B 가 되고, 나머지는 A%B 가 될 것이다. 2) A가 음수이고 B가 양수라면, 역시 몫은 A//B 가 되고, 나머지는 A%B 가 될 것이다. 3) A가 0이면, B가 뭐든간에, 몫과 나머지는 둘 다 0 이 나올것이다. 여기까진 그냥 우리가 생각하는 수학이다. 4) A가 음수이고 B가 음수라면, 5) A가 양수이고 B가 음수라면, 즉, 나누는 수 B가 음수라면, 값이 달라졌다. 나머지는 양수여야 하는데..

[백준/알고리즘/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..

반응형