[AlgoSpot🔴] 알고스팟 > 출전 순서 정하기 / Pyton 문제풀이
해답) import sys def rl(): return sys.stdin.readline() def solution(Russia, Korea): Russia.sort() Korea.sort() win = 0 for Ru in Russia: for i, Ko in enumerate(Korea): if Ru
2020. 3. 31.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 야근 지수 / Python 문제풀이
해답) import heapq def solution(n, works): maxHeap = [] for w in works: heapq.heappush(maxHeap, -w) while n > 0: DoWork = -heapq.heappop(maxHeap) - 1 if DoWork == -1: # 할일을 다함 return 0 heapq.heappush(maxHeap, -DoWork) n -= 1 res = 0 for fatigue in maxHeap: # 남은 일 피로도 계산 res += fatigue ** 2 return res 풀이) 3단계 문제치고 난이도가 쉽다. 1. 가장 많이 남은일을 먼저하는게 항상 최종 피로도를 줄여준다. (그리디하게 구현 가능) 2. 그러므로 현재 가장 많이 남은일을 계속 ..
2020. 3. 29.
[프로토콜] ARP spoofing 이란? / ARP poisoning /
ARP Address Resolution Protocol 의 약자로서, 말그대로 주소를 결정해줍니다. 어떤 주소를 결정해주냐? 같은 IP 를 쓰는 여러 장치들이 있겠죠? 그 중에 통신의 대상이 될 장치의 MAC 주소가 필요합니다. IP 주소를 받아 MAC주소(장치의 직접적인주소)를 결정해줍니다. ARP 통신방법 ARP는 기본적으로 MAC 주소를 얻기 위해 IP를 BroadCast 방식으로 Target으로 보냅니다. (특정 상황에 따라 Unicast로 보내는 경우도 있습니다.) 쉽게 말하자면, 네트워크 내에 모든 이들에게 요청을 하는 것이죠. (하나에게만 보내는것은 unicast) 그 중에 필요한 MAC주소를 가지고 있는 특정 장치의 Response를 이용해 MAC 주소를 얻어냅니다. 그럼, 이때 받았던 ..
2020. 3. 23.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 하노이의 탑 / Python 문제풀이
해답) def solution(n): res = [] blocks = [1, 2, 3] def getLastBlock(block1, block2): for b in blocks: if b != block1 and b != block2: return b def move(blockCount, start, dest): if blockCount == 1: return res.append([start, dest]) lastBlock = getLastBlock(start, dest) move(blockCount-1, start, lastBlock) # 일단 나머지 블록에 옮긴다. res.append([start, dest]) # 맨밑 블록 하나를 목적지에올린다. move(blockCount-1, lastBlock,..
2020. 3. 22.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > N개의최소공배수
해답) import functools import sys sys.setrecursionlimit(10 ** 6) def solution(arr): def getGCD(a, b): if a==0: return b if a < b: a, b = b, a return getGCD(a%b, b) def getLCM(a, b): factor = getGCD(a, b) return int(a*b / factor) return functools.reduce(getLCM, arr) 풀이) LCM : 최소공배수 r : 최대공약수 a = r * a' b = r * b' LCM = r * a' * b' 따라서 a, b 의 최소공배수 = a * b / r ( LCM = a*b/r) 이를 이용해서 풀면 된다. 0) setrec..
2020. 3. 19.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 핸드폰 번호 가리기
해답) def solution(phone_number): return "*" * (len(phone_number)-4) + phone_number[-4:] 풀이) 파이썬은 문자열여러개를 * 연산을 통해 붙일 수 있습니다. 예) '테스트' * 4 = '테스트테스트테스트테스트' 휴대폰번호 길이보다 4 만큼 작은 길이의 * 을 붙여준 후 휴대폰번호 뒷자리 4개를 슬라이싱해서 붙여줍니다. * 이 문제 및 로고의 저작권은 Programmers에 있습니다. 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
2020. 3. 18.
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 멀리 뛰기 > / Python 문제풀이 (2가지방법)
해답) 해답1 - 재귀 import sys sys.setrecursionlimit(10 ** 6) def solution(n): cached = [-1 for _ in range(n+1)] cached[0] = 1 cached[1] = 1 def find(num): if cached[num] != -1: return cached[num] cached[num] = find(num-2) + find(num-1) return cached[num] return find(n) % 1234567 해답2 - 재귀 X def solution(n): res = [0 for _ in range(n+1)] res[0] = 1 res[1] = 1 for i in range(2, n+1): res[i] = res[i-1] + ..
2020. 3. 13.
[프로그래머스💯] 코딩테스트 연습 > 문자열 내림차순으로 배치하기 / Python 문제풀이
해답) 해답1. def solution(s): return "".join(sorted(s, reverse=True)) 해답2. from functools import reduce def solution(s): return reduce(lambda x, y: x+y, sorted(s, reverse=True)) 해답2. 풀이) sorted 는 리스트 입력받아 정렬된 리스트를 반환합니다. (입력 : 리스트 / 출력 : 정렬된 리스트) * reverse=True라는 키를 이용해서 내림차순으로 정렬이 가능합니다. join 은 리스트를 입력받아 리스트 요소들을 선택한 이은 str 을 반환합니다. (입력 : 리스트 / 출력 : 특정 문자로 이어진 문자열) sorted(s, reverse=True) 의 결과 : ['..
2020. 3. 13.