목록CS/Algorithm & Data Structure (23)
예지의 테크 로그포스 (Yeji's Tech Log Force)
단순히 카드세트 배열하나 선언, 그 안에 값이 있으면remove하고 다음 번호 체크 없으면 한 세트를 pack에 추가해주고 해당 번호 하나를 뺐다. 특이한 점이라면 값이 6일때는 9가 있나체크(&반대의 경우 체크)를 했단 것이다. N = list(input()) for i in range(len(N)): N[i]=int(N[i]) pack = [] def addPack(): pack.extend([0,1,2,3,4,5,6,7,8,9]) cnt = 0 for i in N: if i in pack: pack.remove(i) elif i==6 and 9 in pack: pack.remove(9) elif i==9 and 6 in pack: pack.remove(6) else: cnt+=1 addPack() ..
두 자연수의 최대공약수를 구하는 대표적 알고리즘. 특징: 자연수 A,B에서 A%B=R일 때 A,B의 최대공약수 == B,R의 최대공약수 예를 들어 A: 192와 B: 162의 최대공약수를 구할 때(GCD(192,162)) Level A B 1 192 162 2 162 30 3 30 12 4 12 6 즉, 192와162의 최대공약수는 12와 6의 최대공약수(즉, 6)과 동일하다. 따라서 재귀함수를 통해 R이 0이 아닌 동안 두 수를 나누도록 구현할 수 있다. def gcd(a, b): if a%b==0: return b return gcd(b, a%b) print(gcd(192,162))
파이썬에서 큐를 구현할 때 1. 리스트로 구현하기 2. deque라이브러리 이용 리스트로 구현하는건 시간복잡도가 더 높으니 deque을 이용하는 것이 좋다. 통상적으로 삽입은 append(), 삭제는 popleft()를 사용한다. 오른쪽으로 들어온 요소가 왼쪽으로 나간다고 생각하면 편할 것 같다. from collections import duque queue = deque() queue.append(5) queue.append(3) queue.popleft() => 3
나는 아래와 같이 풀었다. 1,1칸부터 8,8칸까지 돌며 조건에 맞는 칸만 체크를 했다. input_data = input() r = int(input_data[1]) c = ord(input_data[0])-ord('a')+1) cnt=0 for i in range(1,9): for j in range(1,9): if abs(r-i)==2 and abs(c-j)==1: cnt+=1 if abs(r-i)==1 and abs(c-j)==2: cnt+=1 print(cnt) 처음에 이동할 수 있는 방향이 몇 개 없으니 그것만 체크하면 되겠다 라고 생각했다 근데 직전에 푼 브루트포스 문제의 여파인지, 8 x 8 좌표는 작으니 그냥 다 체크하자고 생각해버렸던 거 같다. 정답으로 보여주신 코드인데, 처음 생각대로..