전체 글
![알고스팟 note 문제 파이썬으로 풀기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzUqrE%2Fbtqx600WTa0%2FeetEtABVknhYnVj8nRjJak%2Fimg.png)
알고스팟 note 문제 파이썬으로 풀기
문제 자체는 간단하게 보인다. 입력은 8개의 서로 다른 정수 한 줄 뿐이고, 배열에 따라 descending, ascending, mixed 중 하나를 골라 출력하면 된다. (Example 1 같은건 신경안써도 됨) 간단해 보이는 문제지만, 고전했다. 그 이유로는 여럿이 있는데, 우선 첫번째는 저 Example 1, 2, 3 이런것도 출력해야 하나 하고 출력에 넣었다가 안 넣어도 된다는 것을 깨달았다. 두번째 이유는 내 성급함이다. 입력을 항상 받던대로 sys.stdin.readline()으로 받고, 리스트에 넣은 다음 배열해서 출력하는 것이 계속 실패해서 다른 사람의 코드를 좀 보려고 찾아봤는데, 이렇게 c++로 쓴 코드가 나왔다. 보니까 gets함수를 사용해서 입력을 받는데, 이게 버퍼와 관련이 있다..
![알고스팟 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..