만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/기억노트 20

[python] 주어진 수가 소수인지 판별하기

def is_prime(num): if num == 1 or num == 0: return False else: n = int(num ** 0.5) for i in range(2, n + 1): if num % i == 0: return False return True 주어진 수 num에 대해 sqrt(num) 까지에 대해서만 검사하면, 이 num이 소수인지를 판별하는데에 문제가 없다. 이렇게 하면 큰 수에 대해 루프 시간을 num^0.5까지만큼 단축할 수 있다! 1과 0은 소수가 아니므로 제외한다.

[python] sort 를 할 때 2개의 key 를 서로 다른 순서로 정렬하기 (2 key 2 order)

문제정의 선거 후보자들의 득표수를 기록한 list 가 있다고 가정하자. list에는 (득표수, 후보자번호) 형태의 tuple 이 요소로 저장된다. EX) [(5,3),(5,2),(10,99),(10,1)] 위의 후보자 투표 합산 결과에서, 득표수가 많은 순서대로 출력하라. 만약, 득표수가 같은 후보가 있다면 빠른 번호를 가진 후보자를 먼저 출력하라 만약 단순 sort 로 정렬하게 된다면, tuple 의 첫번째 요소의 오름차순순으로 정렬되게 된다. [(5, 2), (5, 3), (10, 1), (10, 99)] 구해야 하는건, 많은 득표를 받은 후보를 번호의 오름차순순으로 정렬해야 한다. 즉, key 1 -> 내림차순 && key 2 -> 오름차순 으로 정렬해야 한다!! lambda 식을 이용해 2번의 정..

[python] 입력받은 문자열 개행 지우기와 그 중요성

from sys import stdin str = stdin.readline() print(str) print("hello.") readline() 을 통해 문자열을 입력받을 때의 문제점은, Enter 즉, 개행 또한 문자열에 포함되게 입력된다는 것이다. 예를 들어 "hi" 를 입력하면 결과는 이렇다. hi 가 print 되고, 한줄만큼 더 개행이 된다는걸 볼 수 있다. print() 함수의 개행 외에, 개행이 1번 더 발생하게 되는 것이다. 이런 방식에서는 문자열에는 개행이 포함되기에 문자열 길이를 계산할때도 문제가 된다! for문으로 문자열 속의 요소들을 모두 탐색한다고 할 때, 개행의 존재를 의식못하면 문제가 될 수 있다. from sys import stdin str = stdin.readline..

[python] 개행/줄바꿈 없이 print 하기

python 에서의 출력함수인 print() 함수는 그냥 사용하면 줄바꿈이 발생한다. print("줄바꿈 없이") print("출력하고 싶어") 그이유는 print 함수의 파라미터 중 하나인 end 의 default 가 "\n" 이기 때문. 이 때문에 내가 출력하고자하는 내용이 끝나면 맨끝에 개행이 발생한다. 그래서 end 의 인자를 적절하게 정해주면 출력의 맨 끝을 내맘대로 할 수 있다. end 에 적절한 인자를 넘겨주자 print("줄바꿈 없이",end=' ') print("출력하고 싶어",end='') 첫 째 줄의 print 에는 ' '을, 둘쨰 줄에는 ''을 넘겨주었다. 2개의 print 문의 맨 끝에는 개행이 발생하지 않는다. 또한 첫째 줄에는 ' ' 만큼의 공백을 넣었으므로 출력에도 그대로 반..

[python] 파이썬 공백 구분해 정수 입력 받기

만약 아래의 문자열 1줄을 입력받았을 때 공백으로 구분되는 정수를 오름 차순 정렬한 배열을 출력해야 한다고 하자. input 10 5 8 2 3 arr = list(map(int,input().split())) arr.sort() print(arr) output : [2, 3, 5, 8, 10] list(map(int,input().split())) 의 작동방식 input() 으로 받은 문자열을 split() 으로 공백 단위로 쪼개 리스트로 나눈다. map 을 이용해 리스트의 모든 원소에 int() 를 적용 list 로 변환해준다. 파이썬은 input() 을 쓰다가는 입력만 받다가 시간이 초과될 수 있다. import sys arr = sys.stdin.readline().restrip() 그러니 이걸 ..

[python] 파이썬 list 2차원 초기화

1차원 리스트 초기화 arr = [] for i in range(10): if i % 2 == 0: arr.append(i) print(arr) 이 방법은 구리다. 너무 길다. 그러니까 list comprehension 을 이용한다. List comprehension arr1 = [ i for i in range(10) if i % 2 == 0] print(arr1) 그렇다면 2차원 초기화는? 위의 리스트 comprehension 이용 시 매우 효과적이다. N * M 크기 2차원 행렬을 초기화하려면 m = 3 n = 3 arr2 = [ [0] * m for _ in range(n) ] print(arr2) 결과 -> [[0, 0, 0], [0, 0, 0], [0, 0, 0]] ** 특정 크기의 2차원 리..