문제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/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 풀이특정 길이 M 이상의 문자열을 입력받아 아래의 3가지의 조건으로 정렬하는것이 핵심이다. 1. 각 단어별 등장횟수를 기록해둔 숫자를 내림차순2. 등장 횟수가 같다면 단어의 길이로 내림차순3. 단어의 길이가 같다면 알파벳순 단어별 등장 횟수 기록은 아래와 같은 가변 map을 사용한다.val words = mutableMapOf() 이 map에 문자열과 그 등장 횟수를 저장하기 위해 아래와 같이 getOrDefault를 이용했다.words에 word라는 값이 존재하면 그 값을, 아니라면 0을 반환하게 된다.words.getOrDefault(word, 0) 따라서 처음 등장한다면 0을 그렇지 않다면 현재 몇번 등장했는지의 값을 얻어..
문제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 한 객체를 여러 조건으로 정렬가능하다.이 문제에서는 ..
문제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의 민겸숫자에..