문제https://www.acmicpc.net/problem/1515 풀이234015가 입력으로 주어졌을 때 아래와 같이1 2 3 4 5 6 7 8 9 10 11 12 13 14 15밑줄 그어진 수가 남은 수, 그렇지 않은게 다솜이가 지워린 수인것을 알 수 있고 마지막 값인 15가 정답이다. 최소인 마지막 값을 찾으려면1부터 1씩 증가시키면서 입력으로 주어진 수( 234015 )의 앞부분부터 지워나가면 된다. 순차적으로 생각하면 다음과 같다.1 -> 2340152 -> 234015, 2 삭제3 -> 34015, 3 삭제4 -> 4015, 4 삭제5 -> 0156 -> 0157 -> 0158 -> 0159 -> 01510 -> 015, 0 삭제11 -> 15, 1 삭제12 -> 513 -> ..
문제https://www.acmicpc.net/problem/20920 풀이특정 길이 이상의 문자열을 입력받아 아래의 3가지의 조건으로 정렬하는것이 핵심이다. 1. 각 단어별 등장횟수를 기록해둔 숫자를 내림차순2. 등장 횟수가 같다면 단어의 길이로 내림차순3. 단어의 길이가 같다면 알파벳순 단어별 등장 횟수 기록은 defaultdict(int)를 이용하여 처음 등장하면 딕셔너리에 단어가 추가되며 값으로 1이 저장되고 두번째로 등장하면 값에 1씩 추가되는 방식으로 기록하였다. sorted(iterable 한 객체, key=lambda x: (-조건1, -조건2, 조건3))sorted와 key에 lambda식을 사용하면 첫번째 인자인 iterable 한 객체를 여러 조건으로 정렬가능하다.이 문제에서는 ..
9회 실기 후기우테코 프리코스가 끝난 뒤로 대략 1주일간 공부했다.파이썬은 계속 써왔지만 판다스와 넘파이는 몇년만에 써보는거라 다시 공부하는 수준이었다.대학교시절 머신러닝을 R로 했었는데 빅분기에선 R보다는 파이썬이 유리할것 같아서 그냥 파이썬으로 공부했다.답 맞춰보니 합격은 한것같은데 확실하진 않으니 기다려봐야지 9회 시험은 구름IDE에 트래픽이 몰려서 사전점검 시간과 본시험 시작하고나서도 잠깐동안 코드 실행이 먹통이 되는 바람에 총 3시간 10분 주어졌다. 신영진컴퓨터학원에서 봤는데 다소 낡아 보이고 어수선한 분위기의 시험장이지만 될건 다 되고 무난했다.어차피 코드는 클라우드 환경에서 돌리는거라 크롬브라우저만 잘 되면 스펙은 중요하지도 않고. 걍 아무데서나 보시길옆에서 시험 내내 키보드 부숴먹을거같..
문제https://www.acmicpc.net/problem/11726 풀이일단 직접 그려보자. 규칙이 보일듯 말듯 하다. 각 인덱스에서 n-1 인덱스에 등장했던 모양을 포함하는 수와 새로 등장한 모양의 수를 세서 더한 값은 다음과 같다. 그렇다. 각 색상은 이전의 두 숫자의 합이 다음 숫자가 되는 피보나치 수열을 따르고 있다.이제 정답 인덱스의 값을 구해서 10007로 나눈 나머지를 출력하면 된다. 정답 코드n = int(input())dp = [1, 2]while n > len(dp): dp.append(dp[-1] + dp[-2])print(dp[n - 1] % 10007) 점화식: dp[n] = dp[n-1] + dp[n-2]
문제 https://www.acmicpc.net/problem/21314 풀이우선 "민겸 수"와 "민겸 숫자"는 다른 개념이다. 민겸 숫자가 모이면 민겸 수가 되는것에 주의하자최소 최대값 모두 MK / K / MMK와 같이 K가 나올때까지 M의 갯수를 센다 최대값을 찾는법: K가 나올 경우 K까지 포함하여 끊어서 해당하는 민겸숫자를 문제에 제시된 변환 표 대로 변환하여 이어준다.끊어낸 마지막 덩어리가 M으로 끝날 경우 M의 갯수만큼 1로 채운 값을 이어준다. 최소값을 찾는법:K가 나올 경우 K를 포함하지 않고 끊어서 해당하는 민겸숫자를 문제에 제시된 변환 표 대로 변환하여 이어준다.(MMK와 같이 끊어진 경우 K를 포함하지 않고 MM까지만 변환)그 이후 K를 포함하지 않고 끊었으므로 K의 민겸숫자에..
문제https://www.acmicpc.net/problem/20300 풀이가장 큰 값과 가장 작은 값을 취하면 되는 그리디 문제이다.정렬한다최대 근손실을 홀수면 가장 큰수를 pop해서 초기화하고 짝수면 0으로 초기화한다남은 수중 가장 큰 값, 가장 작은 값을 을 pop해서 더한 값이 최대 근손실보다 크면 교체한다남은 수가 없어질 때까지 3번을 반복한뒤 최대 근손실을 출력한다참 쉽죠? 정답 코드from collections import dequeN = int(input())M = list(map(int, input().split()))M.sort()M = deque(M)maxM = 0if len(M) % 2 != 0: maxM = M.pop()while len(M) > 0: m = M.p..