목록Language (17)
내 잡다한 노트
# 가변 인수 용도 ) 매개변수가 여럿인 함수를 짤 때 사용, 매개변수가 몇개가 필요한지 모를때 def funtion(*args): print(args) *를 붙이면 args라는 이름의 튜플이 되고 iterable해서 반복문도 사용할 수 있다. 고정인수와 가변인수를 함께 사용할 땐, 고정 매개변수를 먼저 지정해야한다. # 언패킹 인수를 순서대로 넣을 때 리스트나 튜플을 사용하는 방법 x = [10 ,20, 30] def print_numbers(a, b, c) 로 만들어짐. print_numbers(*x) 를 하면 x의 요소들이 순서대로 함수에 들어가게 된다. 이때, 함수의 매개변수 개수와 리스트의 요소 개수는 같아야 한다. 딕셔너리를 언패킹할때는 ** 으로 써야한다. 이때, 함수의 매개변수 이름과 딕셔..
포인터 2) 포인터 변수가 가리키고 있는 변수를 참조하려면 * 를 사용한다. 즉, int *ex = NULL; int data = 100; ex = &data; printf("%d", *ex); 포인터 변수는 간단한 더하기와 뺄셈 연산으로 이웃한 변수의 주소 연산을 수행할 수 있다. 처음 int *pi에 100이라는 주소값이 저장돼있다고 하면 *(pi+1)을 하면 int의 크기가 4이니까 주소값이 104로 연산돼 저장이 된다. 만약 double 포인터 변수로 선언돼있다면 +1을 할 때 주소값은 +8이 되는 것이다. 포인터 변수는 동일한 자료형끼리만 대입이 가능하다. 이중포인터) 포인터 변수의 주소값을 갖는 변수를 이중 포인터라 한다. 즉, 포인터의 포인터인 셈이다. int i = 20; int *pi =..
scanf ( "입력받을 문자의 서식", 변수의 주소); 변수 앞에 &를 붙이게 되면 이는 해당 변수의 주소를 가리키게 된다. 입력할때 일반 변수들에는 &을 붙여서 주소를 보내도록 하고 (call by reference), 배열의 이름과 같이 &를 붙이지 않아도 주소를 가리키는 것들은 &을 떼고 인자로 넣어주면 된다. 그리고 scanf는 #define _CRT_SECURE_NO_WARNINGS 을 상단에 입력해야 보안경고가 안뜬다 그래서 scanf_s를 사용하도록 하자. 정수와 실수를 함께 연산하면 결과값은 실수로 나온다. 왜냐하면 실수가 정수보다 표현 범위가 넓기 때문이다. 즉, 표현 범위가 넓은 쪽으로 자동 변환된다. && = and || = or ! = not stdbool.h 헤더파일을 입력하면 ..
한줄 주석 : // 범위 주석 : /* 주석처리가됩니다ㅏ */ printf("%d %d %d\n", num1, num2, num3); char 1바이트 크기 -128 ~ 127까지의 수를 표현할 수 있다. int 4바이트 크기 char과 int는 %d로 출력하고 long은 출력할 때 %ld, long long은 %lld로 출력한다. 자료형들은 표현할 수 있는 값의 범위가 정해져있다 그걸 회전시킬수있는 원으로 생각하고 각 부분을 값이라고 생각할때 최댓값을 넘어가게되면 오버플로우가 발생해서 자료형이 표현할 수 있는 최솟값으로 시작하게 된다. 이걸 오버플로우라고 한다. 언더플로우는 오버플로우에 반대상황으로 최솟값보다 작아지면 최댓값부터 다시 시작하게 된다. 자료형의 크기를 바이트 단위로 구하는 연산자 size..
# 올림, 내림 math 클래스 안의 ceil, floor함수를 사용하자 math.ceil(i)는 올림 math.floor(i)는 내림 근데, 인자로 들어온 i의 값이 정수 타입으로 반환된다고 한다. #반올림 소수점을 n번째 까지만 표현하고 반올림을 하고 싶을 때, round 함수를 사용하면 된다. round(숫자, n) 파이썬의 반올림은 반올림 하려는 수가 올림, 내림했을 때 동일하게 차이가 나는 경우에는 짝수값으로 반올림한다. round(0.5)의 값은 이상하게도 0이다... 0.5는 0에도 0.5 차이나고 1에도 0.5 차이가 나는 상황이다. 이때 똑같이 가깝다면 짝수를 반환하게 설계돼어 0을 반환한다. 부동소수점의 오차때문에 오류가 생길 수 있음... 부동소수점을 이용해 연산을 할때는 우리 예상과..
dp = [[0] * len(b) for _ in range(len(a))] dp가 이런 값일때 출력으로 확인해주면 길~게 출력이 돼서 확인하기 힘든 경우가 있다. 그럴 땐 print(*dp, sep="\n") 이렇게 작성해주면 [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0] 이렇게 출력이 돼서 쉽게 디버깅을 해줄 수 있다. 진짜 개꿀 리스트앞에 * 이게 리스트 안에서 가장 겉에 있는 값을 한꺼번에 넘겨주기 때문이다. 즉, dp가 2차원배열이니 겉에 값인 2차원 안에 있는 값을 한..
from collections import Counter 로 사용할 수 있다. Counter(a)는 말 그대로 a라는 것에 속하는 값의 개수를 세어 주는 편리한 도구이다. 딕셔너리 형태로 리턴해준다. most_common(int) 를 사용하면 개수가 가장 많은 것을 필터링해서 쓸 수 있다 Counter끼리의 비교도 가능하다 + - & | 같은 연산이 가능하다.
iterable한 객체(리스트, 튜플, 문자열)에서 쉽게 값들을 가져오는 방법 -기본 형태- a[start : end : step] 모두 양수, 음수 다 들어갈 수 있다. start는 시작 인덱스 end는 끝 인덱스, 대신 range()처럼 끝 인덱스는 포함되지 않는다 step는 커지는 단계 default 값은 +1 자주 쓰이는 예시 a = [1,2,3,4,5] a[::-1] 이라고하면 문자열을 역순으로 새롭게 만들수 있다. ex) a = [5,4,3,2,1] a[-3:] = [3,4,5] a[:-1] = [1,2,3,4]