코테용 문제풀이/알고스팟
![알고스팟 divisibility 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmYFWh%2FbtqxJxGCr7l%2FaKmB4s6ifc7OOxADxyiqbK%2Fimg.png)
알고스팟 divisibility 문제 파이썬으로 풀기
62진법으로 된 숫자를 만들고 61로 나누어 떨어지는지를 알아보는 문제이다. 처음에 문제를 풀 때는, 입력값 전체를 변환하고 더해 구하려는 숫자를 만들고 61로 나누려 헀으나, 시간초과가 났다. 그래서 이것저것 찾아보던 도중, 이것을 찾았다. 이말은, 예를 들어 xyz가 입력으로 들어오면, 원래 구해야 하는 숫자는 (x*62^2)+(y*62^1)+(z*62^0)이지만, 이는 (x*(61+1)^2)+(y*(61+1)^1)+(z*(61+1)^0)로도 쓸 수 있고, (x*(61^2+2*61^1+1^2))+(y*(61+1))+(z*1)이 된다. 이를 나열해보면 x*(61^2)+(2x+y)*(61^1)+(x+y+z)가 된다. 이 식을 61로 나누면 나머지는 x+y+z만 남는다. 즉 전체 숫자를 구할 필요가 없고,..
![알고스팟 tiling2 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxFIDh%2FbtqxKrrc9io%2FKkxIIdcA5uPY9W7nraQSnk%2Fimg.png)
알고스팟 tiling2 문제 파이썬으로 풀기
2xn 사각형을 2x1 사각형으로 채우는 경우의 수를 구하는 문제다. 처음 문제를 보면 막막할 수 있지만, 실제 풀이는 매우 간단하다. 이 말대로만 코드를 짜면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #tiling2 import sys case = int(sys.stdin.readline()) ways = [1, 2] # 값 저장 배열 for i in range(case): n = int(sys.stdin.readline()) # 2 x n 의 사각형 while True: if len(ways) > n-1: # 이미 만들어져있다면 더 만들 필요가 없음 break newn = (ways[-2] + ways[-1]) % 1000000007 # 안 만들어져있으면 만들기 ways..
![알고스팟 hamming code 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fly0mi%2FbtqxEiPV0kw%2FE4VWIkEORlz4KlUmUvu7s0%2Fimg.png)
알고스팟 hamming code 문제 파이썬으로 풀기
문제 링크: https://algospot.com/judge/problem/read/HAMMINGCODE 암호화된 코드를 받아 암호화 되기 전의 코드를 출력하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #hammingcode import sys case = int(sys.stdin.readline()) for i in range(case): en = sys.stdin.readline() # 코드 입력 encode = [] for j in range(7): # 전체를 받으면 엔터키까지 받아져서 코드 크기만큼만 써야 함 encode.append(int(en[j])) # 코드 숫자화 syn0 = encode[0]^encode[2]^enc..
![알고스팟 jeonglibe 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8VGB%2FbtqxrlE9Zev%2FpqtX5YCJoMXleJkCsy1620%2Fimg.png)
알고스팟 jeonglibe 문제 파이썬으로 풀기
파일명을 받아서 중복을 제외한 곡의 수를 출력하는 문제이다. 주의해야 할 점은 입력방식이 그냥 파일명이 있는 것과 폴더와 파일명이 같이 있는걸로 나뉘어지고, 파일명도 네 가지의 경우로 나뉜다는 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #jeonglibe import sys case = int(sys.stdin.readline()) songlist = [] for i in range(case): fileandsong = sys.stdin.readline().split('/') # fileandsong[-1]=폴더 뺀 파일명 songchange = fileandsong[-1].replace('. ', '_').replace(' - ', '_').replace(..
![알고스팟 goodset 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqZTmG%2FbtqxrmiXtkE%2FiZKj9rpKVt4ZeqQslft3uk%2Fimg.png)
알고스팟 goodset 문제 파이썬으로 풀기
참가자가 문제를 푼 결과를 보고 문제집합이 '좋은 문제 집합'인지 아닌지를 구분하는 문제이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #goodset import sys case = int(sys.stdin.readline()) for i in range(case): n, m = map(int, sys.stdin.readline().split()) # 참가자, 문제수 players2 = [] result = 0 # 정답 확인용. for j in range(n): ques = list(map(int, input().split())) if ques[0] == 0: # 참가자 중 문제를 하나도 못 푼 경우(1) result +..
![알고스팟 anagram 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiHMCc%2FbtqxmK60nLr%2FFRkqbkteWJQnXUUvMx20ek%2Fimg.png)
알고스팟 anagram 문제 파이썬으로 풀기
문자열을 두 개 받고, 두번째 문자열의 문자를 조합해서 첫번째 문자열을 만들 수 있으면 Yes, 아니면 No.를 출력한다. 여기서 주의하여야 할 점은 첫번째랑 두번째 문자열이 똑같으면 안된다는 점이다. (문제에도 not이라고 강조를 해놓았다) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #anagram import sys case = int(sys.stdin.readline()) for i in range(case): ori, fak = map(list, sys.stdin.readline().split()) # ori=첫번째문자열, fak=두번째문자열 if ori == fak: # 똑같은 문자열이면 print("No.") else: ori.sort() # 문자열 내의 문자들을 정..
![알고스팟 zeroone 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Futwlq%2FbtqwMVBaupq%2FwFf5DYAoLvWtZrAbZKJ2A1%2Fimg.png)
알고스팟 zeroone 문제 파이썬으로 풀기
0과 1로 이루어진 순열의 어떤 구간에서 최대값과 최소값이 일치하는지를 구하는 문제이다. 최대값과 최소갑이 일치한다는 것은 그 구간이 0이나 1 둘중 하나의 숫자로만 구성되어 있다는 것이고, 일치하지 않는다는 것은 0과 1이 섞여져 있다는 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #zeroone import sys numlist = sys.stdin.readline() num2 = [] # 일치하는지 안일치하는지 알아보기 위한 리스트 value = 0 num2.append(value) # 첫 값을 넣어줌 for j in range(len(numlist)-1): # 앞의 값이 현재값과 일치하면 똑같은 수를, 아니면 1 더한 수를 넣음 if n..
![알고스팟 meeting 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE1Cmt%2FbtqwLBQmUre%2FuCvHCtcVKVU6NSI96IGai1%2Fimg.png)
알고스팟 meeting 문제 파이썬으로 풀기
남녀 회원의 수치의 합의 최소값을 출력하면 된다. 문제 보자마자 든 생각은 큰것은 큰거끼리, 작은건 작은거끼리 모아서 빼는게 작지 않을까였다. 그래서 리스트를 받아 정렬하고 빼는 코드를 써 보았다. 1 2 3 4 5 6 7 8 9 10 11 12 #meeting case = int(input()) for i in range(case): n = int(input()) # 사람 수 man = list(map(int, input().split())) # 남자 회원 woman = list(map(int, input().split())) # 여자 회원 man.sort() # 정렬 woman.sort() result = 0 # 출력할 값 for k in range(n): result += abs(man[k] - w..
![알고스팟 koogle 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoaygA%2FbtqwATw54rO%2FDoWkMDFOhqBdzhKAERYQA1%2Fimg.png)
알고스팟 koogle 문제 파이썬으로 풀기
암호의 세기를 구하는 문제이다. 해야할 일을 보자면 1. 암호의 입력을 받는다. 2. 암호의 세기를 각각 계산한다. 3. 세기가 가장 큰 암호를 출력한다. 언듯보면 간단해보이는 문제이다. 하지만 개인적으론 코드를 짤때 포기할뻔한 문제이기도 하다.... 코드를 보면 입력을 받아서 간단한 방식으로 암호 세기를 구하는 코드이다. 문제에서 준 예제를 넣으니 잘 나온다. 정답. 느낀점: 1. 원래의 코드는 숫자를 먼저 구하는 것이 아니라 알파벳 소문자의 수를 구하고 전체 길이에서 소문자의 수를 빼 숫자의 수를 구하는 방식이었다. 이를 위해서 알파벳 소문자로 이루어진 배열을 하나 선언하고 암호를 구성하는 숫자 혹은 문자가 그 배열 안에 있는지(있다=그것은 소문자이다->문자 수 +1, 없다= 그것은 숫자이다->다음으..
![알고스팟 decode 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU9tPL%2FbtqwvrmxRHX%2FHLf2g9yT9pI9kPlQyqzZIk%2Fimg.png)
알고스팟 decode 문제 파이썬으로 풀기
영어로 되있어서 주눅들 수 있지만, 이 문제는 결국 암호화된 숫자를 받아서 그것을 해독하는 것이다. 더 구체적으로 말하자면, 이 문제는 달팽이 모양 배열을 이용한 암호문과 암호문을 만들때 쓰인 배열의 크기를 받아, 해독하여 케이스의 숫자(몇 번째 케이스인지)와 해독문을 출력하는 것이다. 이 문제를 풀기 위하여 할 일을 번호로 나열해보자면, 1. 주어진 크기 (배열의 행과 열을 입력받는다)의 달팽이 배열을 만든다. 2. 배열에 암호문을 잘라 집어넣는다. 3. 배열을 달팽이 모양으로 탐색해가며 암호문을 해독한다(숫자를 알아낸다). 4. 알아낸 숫자를 문자로 치환한다. 정도가 되겠다. 내가 쓴 코드는 세 부분으로 나눌 수 있다. 코드1은 알파벳 출력을 위한 딕셔너리, 입력 받기, 배열에 암호문을 잘라 집어넣기..