2001lbj의 등록된 링크

 2001lbj로 등록된 네이버 블로그 포스트 수는 51건입니다.

(DDPM) Denoising Diffusion Probabilistic Models 리뷰 [내부링크]

이번 글에선 최근 떠오르는 diffusion 생성 모델을 세상에 알린 논문 Denoising Diffusion Probabilistic Models (DDPM)을 리뷰해 보겠습니다. 참고로, 2015년에 다른 논문(Deep Unsupervised Learning using Nonequilibrium Thermodynamics)에서 diffusion 생성 모델을 먼저 발표했으나, DDPM은 몇 가지 개선을 통해 성능을 향상시킨 논문으로 평가됩니다.실제로 인용수 또한 DDPM이 1.5배 정도 더 많습니다. ELBO란? 우선, ELBO에 대해서 알아야 됩니다. ELBO는 Evidence Lower Bound의 약자로, log likelihood의 하한을 뜻합니다. 주어진 데이터를 x라 할 때, 단순히 log p(x)의 꼴로 나타나는 log likelihood를 최대화하는 것은 주어진 데이터에 모델이 굉장히 overfitting되게 됩니다. 따라서, VAE 등 여러 likelihood 기반

백준 2477번: 참외밭 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/2477 2477번: 참외밭 문제 시골에 있는 태양이의 삼촌 댁에는 커다란 참외밭이 있다. 문득 태양이는 이 밭에서 자라는 참외가 도대체 몇 개나 되는지 궁금해졌다. 어떻게 알아낼 수 있는지 골똘히 생각하다가 드디어 좋은 아이디어가 떠올랐다. 유레카! 1m 2 의 넓이에 자라는 참외 개수를 헤아린 다음, 참외밭의 넓이를 구하면 비례식을 이용하여 참외의 총개수를 구할 수 있다. 1m 2 의 넓이에 자라는 참외의 개수는 헤아렸고, 이제 참외밭의 넓이만 구하면 된다. 참외밭은 ㄱ-자 모양이거나 ㄱ-자를 90도, 180도, 270도 회전한 모양(, , 모양)의... www.acmicpc.net 백준 2477번 참외밭 난이도 실버 3 알고리즘 수학, 구현, 기하학 소스 코드 및 해석 https://github.com/powerpowe/solving-baekjoon/blob/master/Baekjoon/bk_2477.py solving

(VGGNet) Very Deep Convolutional Networks for Large-Scale Image Recognition [내부링크]

해당 논문에서는 ConvNet의 깊이에 집중하여, 깊이를 깊게 하기 위해 모든 layer에 3x3, 1x1 크기의 filter만을 이용하여 비교적 단순한 구조를 가지는 VGGNet을 제시했습니다. VGGNet은 이 논문에서 끝나지 않고 다른 여러 모델들에 영감을 주었으며, 이 모델 자체도 여러 모델의 backbone으로서 이용되곤 합니다. 아쉽게도 같은 년도 GoogLeNet에 밀려 대회에선 2등을 차지했으나, GoogLeNet의 복잡한 구조 때문에 오히려 VGGNet이 더 범용적으로 쓰이는 것 같습니다. Architecture 논문에서는 위와 같이 여러 종류의 모델을 소개했습니다. input은 224 * 224의 RGB 이미지로, train set에서 평균 RGB값을 각 픽셀에 빼 주었다 합니다. 공통적으로 2x2 max pooling을 중간중간 이용했고, 활성화 함수는 ReLU를 사용합니다. Conv Layer 뒤에는 3개의 FC layer가 존재합니다. 또한 3x3, 1x1 f

1. gradient, jacobian matrix [내부링크]

"The matrix calculus you need for deep learning" 을 정리함. (https://arxiv.org/abs/1802.01528) The Matrix Calculus You Need For Deep Learning This paper is an attempt to explain all the matrix calculus you need in order to understand the training of deep neural networks. We assume no math knowledge beyond what you learned in calculus 1, and provide links to help you refresh the necessary math where needed. Note that you do not need to und... arxiv.org Vector calculus & partial derivatives 만약 다변수함수인

백준 10845번: 큐 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/10845 10845번: 큐 문제 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다. push X: 정수 X를 큐에 넣는 연산이다. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다. empty: 큐가 비어있으면 1, 아니면 0을 출력한다. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. back: 큐의 가장 ... www.acmicpc.net 백준 10845번 큐 난이도 실버 4 알고리즘 자료 구조, 큐 소스 코드 및 해석 https://github.com/powerpowe/solving-baekjoon/blob/master/Baekjoon/bk_10845.py solving

(GoogLeNet) Going Deeper with Convolutions [내부링크]

해당 논문에선 기존에 있던 AlexNet보다 높은 정확도를 가지면서도 parameter를 12배 줄인 GoogLeNet을 제시했습니다. GoogLeNet은 Inception v1으로도 불리며, 후에 있는 여러 Inception 모델들의 시초격인 논문이 됩니다. 인용수도 23년 3월 기준 48561회나 될 정도로 중요한 논문이라 볼 수 있습니다. 비록 모델은 VGGNet보다 비교적 복잡한 구조를 가지고 있으나, 후에 Inception v3가 생성 모델의 성능을 평가하는 지표인 FID score에 쓰이는 등 사용처가 존재합니다. 모델 설계 동기 해당 논문에서는 모델을 설계한 동기가 매우 구체적으로 나와 있으나, 개인적으론 엄청 중요하지는 않다 생각하고 이해가 잘 가지 않아서 간단하게만 설명하겠습니다. 관심 있으시면 원 논문을 읽어 보시길 바랍니다. 저자들은 sparse, 즉 희박한 network를 좋게 생각한 것 같습니다. 정확한 의미는 모르겠으나, dropout을 이용한 것처럼 모든

(NIN) Network in Network [내부링크]

Network in Network 논문은 AlexNet 다음 년에 나온 논문으로, 이후 나온 모델들에 널리 사용되는 두 가지 아이디어를 소개했습니다. 간단한 내용이므로 소개 위주로 리뷰하도록 하겠습니다. 1. mlpconv layer AlexNet은 conv layer 뒤에 nonlinear한 활성화 함수인 ReLU가 뒤따라 나오는 구조를 가졌습니다. 논문의 저자는 활성화 함수 대신 모든 receptive field에서 공유되는 fc layer를 통해 최적의 활성화 함수를 근사할 수 있도록 설계했습니다. 위와 같이 nxn conv 뒤에 두 번의 fc layer가 따라오는 구조를 가집니다. 이는 nxn conv를 지난 feature map에 1x1 conv를 두 번 적용하는 것과 같습니다. 1x1 conv가 좋음을 보인 논문인 것이죠. 이후 VGGNet이나 GoogLeNet 논문에서도 NIN을 언급하며 1x1 conv를 사용한 것으로 알고 있습니다. 2. Global Average P

(FCN) Fully Convolutional Networks for Semantic Segmentation 리뷰 [내부링크]

해당 논문에서는 semantic segmentation에 사용되는, CNN으로만 이루어진 FCN 모델을 제시하여 좋은 성능을 얻어냈습니다. FCN은 기존 classification에서 좋은 성능을 보인 AlexNet, VGG, GoogLeNet을 변형시킨 것인데, 해당 모델들에는 FC layer가 존재했습니다. 우선, FC layer의 단점과, 그것을 변형시키는 방법을 알아보겠습니다. FC layer의 단점 AlexNet, VGG, GoogLeNet은 모두 CNN을 통해 특징을 추출한 뒤, 그것을 flatten시켜 fc layer에 넣고 softmax를 거쳐 최종 결과를 반환합니다. 그러나, 위와 같은 FC layer는 flatten 과정에서 공간 정보가 소실되고, CNN 자체는 input의 크기가 달라져도 사용 가능하지만 fc layer 때문에 크기가 다른 input을 그대로 이용하지 못합니다. FC -> Conv 위와 같은 단점 때문에, 저자들은 FC layer 또한 Conv l

파일 읽고 쓰기 [내부링크]

* "점프 투 파이썬"을 참고함 파일 생성하기 파이썬 내장 함수인 open() 함수를 이용하여 파일을 읽거나 쓸 수 있다. open() 함수는 파일 객체 = open(파일명, 파일 열기 모드)의 꼴로 사용한다. - 파일 열기 모드는 아래와 같다. r : 읽기모드 (파일을 읽기만 할 때 사용) w : 쓰기모드 (파일에 내용을 쓸 때 사용) a : 추가모드 (파일의 마지막에 새로운 내용을 추가 시킬 때 사용) - 파일을 쓰기모드로 여는 경우 해당 파일이 이미 존재한다면 해당 파일의 내용이 모두 사라지며 새로 파일을 생성한다. - 파일의 디렉터리를 지정할 수도 있다. 파이썬 코드에서는 파일 경로를 표시할 때 /(슬래시)를 이용하거나, 역슬래시 2개를 이용해야 한다. 아니라면 r"C:\doit\새파일.txt"처럼 r 문자(Raw String)을 문자열 앞에 덧붙여 사용해야 한다. close() 멧는 파일 객체.close()의 꼴로 사용한다. - close()함수를 통해 열려 있는 함수를 닫

객체와 클래스 [내부링크]

클래스 클래스는 아래와 같이 정의한다 class 클래스명: def __init__(self, . . . ): . . . def method1(self, . . . ): . . . . . . __init__ (self, . . .)은 생성자로, 객체의 인스턴스 변수들을 정의하고 초기화한다. 접근 제어자 접두사의 밑줄의 개수에 따라 변수가 public인지, protected인지, private인지 정해진다. - 접두사의 밑줄이 한 개인 경우 그 변수는 protected로, 접근하지 말라는 경고의 의미를 가지지만 클래스 외부에 서도 접근 가능하다. - 접두사의 밑줄이 두 개인 경우 그 변수는 private로, 클래스 외부에서 접근 불가능하나 상속이 되지 않는다. - private나 protected로 만들 때, 접미사에는 밑줄이 두 개 이상이면 안 된다. - private 변수 또한 객체._{클래스명}__변수명 으로 접근 가능하므로, 사실상 파이썬에서 완전한 정보은닉은 없는 샘이다. cl

모듈 [내부링크]

# "점프 투 파이썬"을 참고하여 작성함. 모듈 함수, 변수, 클래스 등을 모아 놓은 파일로, 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일 import 모둘명 의 꼴로 사용한다. # 모듈 만들기 PI = 3.141592 def add(a, b): return a + b # 위 파일을 mod1.py로 C:\doit 디렉터리에 저장 후, 같은 위치에서 아래 파이썬 파일 실행 import mod1 print(mod1.add(3, 4)) # 7 # 모듈 이름 없이 사용하고 싶은 경우, 아래와 같이 모듈을 불러온다. from mod1 import add print(add(3, 4)) # 7 # 변수 또한 불러올 수 있다. print(mod1.PI) # 3.141592 if __name__ == "__main__" 모듈에 print문 등이 존재한다면, 이를 불러온 파일에서도 그 print문이 실행된다. 이와 같은 경우를 방지하기 위해, 지금 실행하고 있는 파이썬 파일의

(ResNet) Deep Residual Learning for Image Recognition [내부링크]

기존엔 깊은 Network는 학습이 어렵다는 단점이 있었습니다. 위 문제를 해결하기 위해 저자는 “residual learning framework”를 제안했고, 이것이 학습이 더 잘 되고 성능이 더 좋음을 실험을 통해 증명했습니다. 실제로, 기존에 있던 VGGnet보다 8배 깊은 네트워크를 학습시키는데 성공했으며, 더 높은 성능을 얻어내었습니다. 이 논문은 2023년 3월 기준 157364번의 인용을 받은 만큼 딥러닝에 있어서 매우 중요한 논문 중 하나입니다. ResNet에서 사용된 shortcut 아이디어는 후에 많은 모델에 적용될 정도로 중요한 아이디어이고, ResNet 자체도 여러 모델들의 backbone 모델로 사용되기까지 하니, 딥러닝을 하려면 꼭 알아야 될 내용인 것 같습니다. 무작정 깊은 네트워크의 성능이 좋은 것은 아니다. 출처: 원 논문 위와 같이 기존 모델은 56 layer를 가지는 plain 네트워크보다 20 layer의 성능이 더 높게 나왔습니다. 이는 무작정

시간 복잡도 분석 (Time complexity) [내부링크]

시간 복잡도란? - 입력 크기에 따라서 단위 연산이 몇 번 수행되는지 결정하는 절차 모든 경우 분석 (every-case analysis) - 복잡도는 입력 크기 n에만 종속되며, 입력 내용과는 무관하게 복잡도는 항상 일정함. - T(n)의 꼴로 표기함. - 예를 들어, 리스트 내 모든 값들의 합을 계산하는 경우, 단위 연산을 += 으로 정할 시 무조건 for문을 n번 실행하므로 시간 복잡도 T(n) = n 이다. 최악의 경우 분석 (worst-case analysis) - 복잡도는 입력 크기 n과 입력 값 모두에 종속됨. - 단위 연산이 수행되는 횟수가 최대, 즉 최악인 경우를 선택함. - W(n)의 꼴로 표기함. - 예를 들어, 길이가 n인 리스트 내에서 어떠한 수 y를 검색하는 경우, 단위 연산을 list[i] == y 라고 정할 시 최악의 경우 for문을 n번 수행하므로 W(n) = n 이다. 이 경우, 리스트의 값에 따라 검색하는 횟수가 달라지므로 모든 경우 분석은 불가능하

알고리즘의 시간 복잡도의 점근적 표기법 [내부링크]

개요 어떠한 알고리즘의 실행 시간을 입력 크기 n에 따른 단위 연산 수로 정의한 것으로, n에 대한 함수로 표현할 수 있음. 동일한 문제에 대해 알고리즘 1은 n2의 시간 복잡도, 알고리즘 2는 n이라 하면 알고리즘 2가 무조건 효율적이다. 그러나, 알고리즘 1은 n^2, 알고리즘 2는 10000n이라 두면 무엇이 더 효율적인지는 n에 의존한다. n이 작은 경우 알고리즘 1이 더 효율적이며, n이 큰 경우 알고리즘 2가 더 효율적이다. 알고리즘의 점근적 복잡도 입력 크기 n의 값이 무한히(혹은 충분히) 큰 경우일 때 알고리즘의 복잡도 n의 값이 충분히 크다 가정하므로, 점근적 시간 복잡도는 최고차항의 차수가 지배한다. 점근적 복잡도로 따지는 경우, 위 예시에서 알고리즘 2가 더 효율적이라 할 수 있음 O (BIg - O) 표기법 알고리즘 복잡도의 점근적 상한을 표기함 정의: 어떤 알고리즘의 시간 복잡도를 g(n)이라 할 때, n > N인 모든 정수 n에 대해 항상 g(n) ≤ c *

백준 10816번: 숫자 카드 2 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 10816번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 숫자 카드 2 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 83012 30563 21897 36.072% 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는... www.acmicpc.net 백준 10816번 숫자 카드 2 난이도 실버 4 알고리즘 자료구조, 정렬, 이분 탐색, 해시를 이용한 집합과 맵 소스 코드 및 해석 https://github.com/powerpowe/solving-baekjoon/blob/m

백준 1463번: 1로 만들기 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 1463번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 1로 만들기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.15 초 ( 하단 참고 ) 128 MB 220707 72426 46296 32.240% 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. ... www.acmicpc.net 백준 1463번 1로 만들기 난이도 실버 3 알고리즘 다이나믹 프로그래밍 소스 코드 및 해석 https://github.com/powerpowe/solving-baekjoon/blob/master/Baekjoon/bk_1463.py

Section 0. Sets and Relations [내부링크]

Subset (부분 집합) - 집합 B의 모든 원소가 집합 A에 포함되면 B를 A의 subset이라 한다. 이를 B ⊆ A나 A ⊇ B로 표현한다. - 만약 B ⊆ A 이며 B ≠ A라면 B ⊂ A나 A ⊃ B로 표현한다. - A는 항상 A의 부분집합이고, 이를 A의 improper subset(가부분집합)이라 한다. 즉, A는 A의 가부분집합이다. 또한 위 경우를 제외한 A의 부분집합들을 A의 proper subset(진부분집합)이라 한다. Cartesian product (데카르트 곱) - A, B가 집합일 때, 집합 A × B = {(a, b)|a∈A and b∈B}를 A와 B의 데카트르 곱이라 한다. ex) A = {1, 2, 3}, B = {3, 4} 일 때, A×B = {(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)} - 수의 집합 - Z는 정수의 집합, Q는 유리수의 집합, R은 실수의 집합이다. - Z+, Q+, R+는 각각 Z,

Section 2. Binary Operation [내부링크]

Binary Operation (이항연산) - 집합 S에서의 binary operation *는 S×S를 S로 mapping하는 함수로, 각 (a, b)∈S×S에 대해 *((a,b))를 a*b로 표현한다. ex) 더하기 기호 +는 실수에서의 binary operation이라 할 수 있다. Closed under * (닫혀 있음) - *를 S에서의 binary operation이라 하고, H를 S의 subset으로 둘 때, 모든 원소 a,b∈H에 대해 a*b∈H라면 H가 closed under * 라 한다. - 만약 H가 closed under *라면, 범위를 S가 아닌 H로 제한한 경우 *를 induced operation of * in H라 한다. (유도된 연산) ex) R에서의 덧셈 +는 R*에 대해 2, -2 ∈ R*이지만 2 + (-2) = 0 는 R*에 없으므로 R*는 not closed under +이다. ex) Z에서의 곱셈 ·은 H={n2|n∈z+}에 대해 r2, s2

Section 3. Isomorphic Binary Structures [내부링크]

Binary Algebraic Structure (이항 대수적 구조) - 집합 S에서 정의된 이항 연산 *를 <S, *>로 나타내도록 정의하고, 이를 binary algebraic structure라 한다. Isomorphism (동형 사상) - <S, *>, <S', *'>가 binary algebraic structure일 때, isomorphism of S with S'는 모든 x, y ∈ S에 대해 ф(x * y) = ф(x) *' ф(y) (homomorphism property)를 만족하는 one to one 함수 ф이다. - isomorphism이 존재한다면, S와 S'는 isomorphic(동형) binary structure이고, S ≅ S' 로 표현한다. 이때 *와 *'는 생략한다. Isomorphic은 Equivalence Relation이다. - 모든 binary structure의 집합을 Ω라 두고, S, S' ∈ Ω 이라 둔다. 이때 isomorphism ф

Section 4. Groups [내부링크]

Group(군) - binary structure <G, *>가 아래 3가지 axiom을 만족한다면 <G, *>는 group(군)이다. A1) 모든 a,b,c ∈ G에 대해 (a*b)*c = a*(b*c)여야 한다. (associativity of *) A2) 항등원 e가 존재해야 한다. 즉, 모든 x에 대해 x*e = e*x = x 여야 한다. (identity element e for *) A3) 모든 a∈G에 대해 a*a' = a'*a = e를 만족하는 역원 a' ∈ G가 존재해야 한다.(inverse a' of a) 이때 A1만 만족 시 semigroup(반군), A1, A2만 만족 시 monoid(모노이드)라 한다. ex) <Z+, +>는 항등원이 없으므로 군이 아니다. ex) <Z+, ·>는 항등원 1이 존재하지만 역원이 존재하지 않으므로 군이 아니다. ex) <Mn×n(R), ·>는 determinant가 0인 invertible matrix만 역원이 존재하므로 A3를

Section 5. Subgropus [내부링크]

Notation: a+b, ab, a-1, -a - multiplicative notation: a*b를 ab로, a의 역원을 a-1로, aaa...a = an으로, a-1a-1...a-1 = a-n으로 표현. - addictive notation: a*b를 a+b로, a의 역원을 -a로, a+a+...+a = na로, (-a) + . . . + (-a) = -na로 표현. Order (위수) - G가 군일 때, G의 order(위수)는 |G|이다. Subgroup (부분군) - <G, *>가 군일 때, G의 subset H가 *에 의해 닫혀 있으며 H가 *에 의해 군을 이룬다면, H는 G의 subgroup(부분군)이다. - H가 G의 부분군일 때, H ≤ G나 G ≥ H로 나타낸다. - H ≤ G 이며 H ≠ G라면, H < G 나 G > H로 나타낸다. ex) <Z, +> < <R, +> 이다. - G가 군일 때, G 자체를 G의 improper subgroup (가부분군)이라

Section 6. Cyclic Groups [내부링크]

Elementary Properties of Cyclic Group(순환군의 특성) Theorem 6.1 - 모든 순환군은 아벨 군이다. pf) G가 순환군이며 a가 G의 생성원이라 한다 (G = <a> = {an | n ∈ Z}). g1, g2가 G의 서로 다른 두 원소라면 g1 = ar , g2 = as를 만족하는 r, s가 존재한다. 따라서 g1g2 = aras = ar+s = as+r = asar = g2g1 이다. 유한하면서 순환군이 아닌 군의 예시 - Klein 4-group은 유한군이나 순환군이 아닌 예시 중 하나이다. Division Algorithm for Z (나눗셈정리) - 양의 정수 m과 정수 n에 대해 n = mq + r , 0 ≤ r < m 을 만족하는 정수 q, r 이 unique하게 존재한다. - 이때 q를 quotient(몫), r을 remainder(나머지)라 한다. Theorem 6.6 : 순환군의 부분군 - 모든 순환군의 부분군 또한 순환군이다.

Section 7. Generating Sets [내부링크]

여러 개의 원소로 Generate되는 군 Remark - G가 군이고, a, b ∈ G이며 K를 a, b를 포함하는 G의 부분군으로 둔다. 이때 모든 정수 n, m에 대해 an, bm ∈ K이다 (<a>가 a를 포함하는 가장 작은 G의 subgroup이고, <b>가 b를 포함하는 가장 작은 G의 subgroup이므로). 따라서 모든 정수 n, m에 대해 anbm ∈ K이다. 따라서 정수 mi, ni (i=0, . . . , t)에 대해 아래 식이 성립한다. (K는 e = a0b0, a = a1b0, b = a0b1을 포함한다.) (예를 들어, a2b4a-3b2a5 ∈ K 이다. 이때 이것은 일반적으로 a4b6이 아니므로 위와 같이 나타낸다.) (또한, a2b4a-3b2a5 의 inverse는 (a2b4a-3b2a5 )-1 = a-5b-2a-3b-4a-2 이다. (일반적인 제곱 연산과 다름)) Theorem 7.4 - 군 G의 부분군들 H1~Hi의 intersection(교집합) 또한

오류와 예외처리 [내부링크]

* "Python(파이썬)과 Matplotlib, Numpy, Pandas (양원영, 고병천 외 3명)" 을 참고함. 오류의 종류 오류에는 구문오류와 실행오류가 있다. 구문오류(Syntax Error)는 괄호나 따옴표를 닫지 않거나, 들여쓰기를 제대로 하지 않는 등의 이유로 생기는 오류를 의미한다. 실행오류(Runtime Erroe)는 코드가 실행되는 도중 어떠한 이유로 인해 코드의 실행이 중지되는 경우를 말한다.(ex. 정의되지 않은 변수를 인용함) 파이썬에서는 실행오류 사태를 예방하기 위해 try-except문을 이용할 수 있다. try문 내의 코드를 실행할 때 오류가 발생한다면, except문이 실행된다. # try-except 문의 예시 try: x = int(input("제곱 계산기입니다. 숫자를 입력하세요")) print(x**2) except: # ValueError 등의 오류 발생 시 print("숫자가 아닙니다!") try - except - else - finall

딕셔너리 자료형 [내부링크]

딕셔너리 - 두 요소의 대응 관계를 나타내는 자료형으로, Key와 Value가 한 쌍으로 나타남 - 리스트로는 나타내기 힘든 두 요소간 대응관계를 나타내기 좋음 - 딕셔너리명 = {key1: value1, key2: value2, . . . }의 형태로 선언한다. - key값은 불변이며, value값은 변할 수 있다. - key 값이 중복되면 한 가지를 제외한 나머지 것들이 무시되므로, 주의가 필요하다. # 딕셔너리 선언 dic1 = {'김연아': '피겨', '류현진': '야구', '박지성': '축구'} # key, value로의 list dic2 = {'a': [1,2,3], 'b': '안녕} # value값에는 리스트가 들어갈 수 있다. dic_error = {[1,2,3]: 'a'} # 오류 발생, key값은 변하면 안 되므로 리스트가 들어갈 수 없다. dic_tuple = {(1,2,3): 'a'} # 튜플은 불변이므로 key에도 사용 가능하다. Key를 사용해 Value

딕셔너리 관련 함수들 [내부링크]

keys, values, items - 딕셔너리명.keys()는 딕셔너리의 key들만을 모아 dict_keys 객체를 반환한다. - 리스트로 반환받고 싶다면 list(딕셔너리명.keys())를 사용한다. - 딕셔너리명.values()는 딕셔너리의 value들만을 모아 dict_values 객체를 반환한다. - 이 또한 리스트로 반환받고 싶다면 list(딕셔너리명.values())를 사용한다. - items 함수는 key와 value의 쌍을 튜플로 묶은 요소들을 dict_item 객체로 반환한다. - 이 또한 리스트로 반환받고 싶다면 list(딕셔너리명.items())를 사용한다. dic1 = {'이름': '장하권', '닉네임': 'Nuguri', '포지션': 'Top', '팀' : ['DWG', 'FPX']} list(dic1.keys()) # ['이름', '닉네임', '포지션', '팀'] list(dic1.values()) # ['장하권', 'Nuguri', 'Top', ['DWG

집합 자료형 [내부링크]

집합 - 집합 자료형은 set(요소)로 생성하며, 요소에는 리스트나 문자열 등이 들어간다. - 집합 자료형은 중복을 허용하지 않고, 순서가 없다. - 빈 집합은 set()으로 생성한다. s1 = set([1,2,3]) print(s1) # {1, 2, 3} s2 = set([1,2,2,3,3]) print(s2) # {1, 2, 3} s3 = set("Hello") print(s3) # {'H', 'o', 'e', 'l'}로, 순서가 없어지는 것을 알 수 있다. 두 집합의 연산들 (1). 교집합 - 교집합은 집합1 & 집합2의 꼴이나 집합1.intersection(집합2)의 꼴로 구한다. (2). 합집합 - 합집합은 집합1 | 집합2의 꼴이나 집합1.union(집합2)의 꼴로 구한다. (3). 차집합 - 차집합은 집합1 - 집합2의 꼴이나 집합1.difference(집합2)의 꼴로 구한다. (4). 대칭차집합 - 대칭차집합은 A B = (A U B) - (A ∩ B)로 정의된다.

불 자료형 [내부링크]

불 자료형 - 불 자료형이란 참(True)과 거짓(False)을 나타내는 자료형으로, True와 False 두 가지 값만을 가진다. - 불 자료형은 조건문의 반환 값으로도 활용된다. # 불 자료형 b1 = True b2 = False print(1 == 1) # True print(2 < 1) # False 자료형의 참/거짓 - 문자열, 리스트, 튜플, 딕셔너리 등이 비어 있으면 False이고, 아니라면 True이다. - 숫자는 0인 경우 False이고, 다른 숫자일 경우 True이다. - bool() 함수는 자료형이 참인지 거짓인지 반환한다. print(bool('python')) # True print(bool('')) # False print(bool([1,2,3])) # True print(bool([])) # False print(bool(0)) # False print(bool(1)) # True # 자료형의 참/거짓 이용하기 a = [1, 2, 3, 4] while a:

for문 [내부링크]

for문 for문은 어떤 객체의 원소들을 하나하나씩 변수에 대입하여 주어진 문장을 수행한다. 객체에는 리스트, 튜플, 문자열 등이 들어간다. ''' for 변수 in <리스트, 튜플, 문자열 등>: 수행할 문장들 위 꼴로 사용한다. ''' # 리스트 이용하기 numbers = [1, 2, 3] for i in numbers: print(i) # 1 / 2 / 3 출력 # 리스트 속 튜플의 쌍 이용 a = [(1,2), (3,4), (5,6)] for (i, j) in a: # i, j에 각각 1, 2 / 3, 4 / 5, 6 이 대입된다. print(i+j) # 3 / 7 / 11 출력 # 문자열 이용 for i in '안녕하세요': print(i) # 안 / 녕 / 하 / 세 / 요 출력됨 range 함수 - range(n)의 꼴로 사용할 시 0 이상 n 미만의 정수를 포함하는 range 객체를 반환한다. - range(n, m)의 꼴로 사용할 시 n 이상 m 미만의 정수를 포함하

함수 [내부링크]

함수의 구조 - 파이썬에서는 함수를 아래 구조로 선언한다. def 함수명(매개변수): <수행할 문장> - 함수의 결괏값을 지정하기 위해서는 return 명령어를 사용해야 한다. - 결괏값을 여러 개 동시에 반환하려면 튜플을 이용한다. - return 명령어가 실행되면 함수를 빠져나가므로, break처럼 사용 가능하다. def add(a, b): return a + b print(add(3, 5)) # 8 def add_and_mul(a, b): return a + b, a*b print(add_and_mul(3,5)) # (8, 15) def mundo(intelligence): if intelligence == '천재': return print('문도 바보다') mundo('천재') # 출력 X mundo('바보') # 문도 바보다 매개변수 지정하여 호출하기 - 함수를 호출할 때 매개변수를 지정하여 순서에 영향 없이 값을 넣을 수 있다. def divide(a, b): return

퍼셉트론(perceptron) [내부링크]

iai postech 채널의 강의를 참고하였습니다. Classification(분류) - y가 이산변수일 때, 새로 들어오는 input이 어느 class로 들어가야 할지 분류하는 알고리즘을 만들어야 함. - 가장 간단한 꼴은 y가 binary인 경우로, 두 개의 class 중 어디로 들어갈지 구분해야 함. Perceptron(퍼셉트론) - 분류의 한 예로, 고객의 여러 정보들로 고객에게 대출을 해 줄지 결정해야 하는 상황이라 가정. input X = [[x1], . . . ,[xd]] 은 '손님의 정보들'이고, weight W = [[w1], . . . , [wd]] 로 둔다. - 이 때, 퍼셉트론은 아래와 같이 대출 여부를 결정한다. (threshold는 임계값) 이 때, 1을 대출 허용, -1을 대출 거부로 둔다면 h(x)를 아래와 같이 정의할 수 있다. 이 때 sign은 x > 0이면 1, x = 0이면 0 , x < 0 이면 -1을 반환하는 함수이다. 또한 더 간소화시키기 위

백준 1004번: 어린 왕자 파이썬 풀이 [내부링크]

# 백준 1004번 어린 왕자 # 난이도 실버 3 # 알고리즘 기하학 # 소스 코드 및 해석 def distance(x1, x2, y1, y2): return ((x2-x1)**2 + (y2-y1)**2)**0.5 def xor(B1, B2): return False if B1==B2 else True T = int(input()) for _ in range(T): x1, y1, x2, y2 = map(int, input().split()) n = int(input()) meet = 0 for _ in range(n): cx, cy, r = map(int, input().split()) if xor(distance(x1, cx, y1, cy)>r, distance(x2, cx, y2, cy)>r): meet+=1 print(meet) 1. 문제 풀이법 시작점, 끝점을 기준으로 주어지는 각 행성계에 대해, 만약 시작점, 끝점이 모두 행성계 안에 있거나, 시작점, 끝점이 모두 행성계 밖

백준 1009번: 분산처리 파이썬 풀이 [내부링크]

# 백준 1009번 분산처리 # 난이도 브론즈 3 # 알고리즘 수학, 구현 # 소스 코드 및 해석 rlist = [[10], [1], [6,2,4,8], [1,3,9,7], [6,4], [5], [6], [1,7,9,3], [6,8,4,2], [1,9]] for _ in range(int(input())): a, b = map(int, input().split()) print(rlist[a%10][b%len(rlist[a%10])]) 1. 문제 풀이법 문제 자체는 ab의 일의 자릿수를 구하는 간단한 문제이다. 그러나 a**b%10의 코드로 쓰면 시간 초과가 발생한다. 따라서 일의 자릿수의 규칙성을 이용하여 풀어야 한다. 7을 예로 들 때, 7의 n제곱의 첫 자릿수는 7, 9, 3, 1이 반복된다. 이를 rlist에 각각 0~9의 규칙을 저장하여 이용한다. 2. rlist[a%10][b%len(rlist[a%10])])의 의미 a가 10 이상일 때도 a의 첫 자리만 보면 된다. 예를

백준 4673번: 셀프 넘버 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런... www.acmicpc.net 4673번: 셀프 넘버 난이도: 실버 5 첫 소스코드: for i in range(1, 10001): self = True for j in range(max(1,i-35), i): if j+sum(map(int, list(str(j))

백준 2941번: 크로아티아 알파벳 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에... www.acmicpc.net 2941번: 크로아티아 알파벳 난이도: 실버 5 소스코드: s = input() cro_list = ['c=', 'c-', 'd-', 'lj', 'nj', 's=', 'z='] for c in cro_list: s = s.re

백준 1316번: 그룹 단어 체커 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 문제 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파... www.acmicpc.net 1316번: 그룹 단어 체커 난이도: 실버 5 소스코드: N = int(input()) group_count = 0 for _ in range(N): word = input() group = True for s in set(wo

백준 1193번: 분수찾기 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/1193 1193번: 분수찾기 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어... www.acmicpc.net 백준 1193번: 분수찾기 난이도: 브론즈 1 소스코드: X, n = int(input()), 2 a = lambda x: x*(x-1)//2 # 몫 나눗셈 기호입니다. 주석이 아닙니다 while X > a(n): n+=1 r = X

백준 2830번: 설탕 배달 파이썬 풀이 [내부링크]

https://www.acmicpc.net/submit/2839 로그인 로그인 로그인 상태 유지 로그인 아이디나 비밀번호를 잊었을 때는, 여기 를 눌러주세요. 회원 가입은 여기 에서 할 수 있습니다. Baekjoon Online Judge 소개 뉴스 생중계 설문조사 블로그 디스코드 서버 기부하기 기능 추가 요청 스페셜 저지 제작 실험실 채점 현황 채점 현황 문제 문제 단계별로 풀어보기 알고리즘 분류 추가된 문제 문제 순위 최근 제출된 문제 최근 풀린 문제 재채점 및 문제 수정 유저 대회 / 고등학교 대회 FunctionCup Good Bye, BOJ kriiicon 구데기컵 꼬마컵 네블컵 소프트콘 웰노... www.acmicpc.net 백준 2839번: 설탕 배달 난이도: 브론즈 1 소스코드: N = int(input()) num_list = [N, N-3, N-6, N-9, N-12] find = False for i in range(5): if num_list[i] >=0 and

백준 11653번: 소인수분해 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/11653 11653번: 소인수분해 입력 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. 출력 N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다. 예제 입력 1 복사 72 예제 출력 1 복사 2 2 2 3 3 예제 입력 2 복사 3 예제 출력 2 복사 3 예제 입력 3 복사 6 예제 출력 3 복사 2 3 예제 입력 4 복사 2 예제 출력 4 복사 2 예제 입력 5 복사 9991 예제 출력 5 복사 97 103 채점 및 기타 정보 이 문제의 채점 우선 순위는 2이다. www.acmicpc.net 백준 11653번: 소인수분해 난이도: 실버 5 소스코드: # 처음에 짠 코드(멍청풀이) from math import floor, sqrt N = int(input()) prime = [] if N==1: pass else: for i in range(2,2+f

백준 9020번: 골드바흐의 추측 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/9020 9020번: 골드바흐의 추측 9020번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 골드바흐의 추측 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 50601 21311 16303 40.778% 문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는... www.acmicpc.net 9020번: 골드바흐의 추측 난이도: 실버 1 소스코드: # 처음 제출한 코드 prime = [2] for i in range(3,10001): index = 0 while i%prime[index] != 0: if prime[i

백준 2869번: 달팽이는 올라가고 싶다 파이썬 풀이 [내부링크]

# 백준 2869번 달팽이는 올라가고 싶다 # 난이도 브론즈 1 # 알고리즘 수학 # 소스 코드 from math import ceil A, B, V = map(int, input().split()) print( ceil((V-A)/(A-B)) + 1) 1. (V-A)/(A-B) + 1 설명 A-B는 하루에 올라가는 순 이동량이라 생각할 수 있고, V - A는 전체 올라가야 하는 거리에서 낮에 올라갈 수 있는 거리를 뺀 것이다. 즉, V-A는 마지막 날 턱걸이로 낮에 끝까지 오르는 날을 빼고, 그 전까지의 거리이다. 즉 V-A만큼의 거리를 순 이동량으로 이동한 후, 마지막 날 낮에 A만큼을 오르면 끝나는 것이다. 이것이 마지막 식에서 1을 더하는 이유이다. 2. ceil 설명 V-A를 순 이동량으로 나눈 숫자가 딱 나눠 떨어진다면 계산이 편하다. 딱 그 숫자만큼의 날 동안 V-A까지 이동한 후, 마지막 날 A만큼 이동하면 되는 것이다. 그러나 딱 나눠 떨어지지 않는다면 어떨까? 예를

백준 1002번: 터렛 파이썬 풀이 [내부링크]

# 백준 1002번 터렛 # 난이도 실버 4 # 알고리즘 수학, 기하학 # 소스 코드 및 해석 import sys input = sys.stdin.readline T = int(input()) for _ in range(T): x1,y1,r1,x2,y2,r2 = map(int, input().split()) d = ((x1-x2)**2 + (y1-y2)**2)**0.5 if d==0 and r1==r2: print(-1) elif d in [abs(r1-r2), r1+r2]: print(1) elif abs(r1-r2) < d < r1+r2: print(2) else: print(0) 1. 문제 풀이법 각 터렛의 위치를 (x1,y1), (x2,y2)라 두었고 반지름 r1, r2가 주어졌으므로, 두 원의 교점의 개수를 파악하는 문제로 생각할 수 있다. 2. d의 의미 d는 (x1,y1) 과 (x2,y2) 사이의 거리를 나타낸다. 3. 처음 if d==0일 경우 두 점의 좌표가 같고,

2-2. 확률밀도함수, 누적분포함수 개념정리 [내부링크]

이산형/연속형 확률변수 확률변수가 가질 수 있는 값이 유한하거나 가산무한이면 이산형이고, 범위가 구간인 경우 연속형이다. * 혼합형인 확률변수도 있을 수 있다. (ex. {1,2,(5, 10)}) 확률밀도함수(PDF) 확률밀도함수는 확률변수의 분포형태를 나타내는 함수로, 모든 실수 x에 대해 f(x) ≥ 0 이여야 한다. 또한, 이산형이라면 확률변수가 가질 수 있는 모든 값 x1~xn에 대해 f(x1) + . . . + f(xn) = 1이며 연속형이라면 (-∞,∞)에서의 적분값이 1이다. ex) (0,3)에서 정의된 연속형 확률변수 f(x) = x2/9에 대해 아래 내용이 성립하므로, 이는 확률밀도함수이다. 또한 연속형 확률변수는 모든 x에 대해 각각의 값은 0이나, 확률이 구간으로 정의된다. ex) (0,3)에서의 연속형 확률변수 f(x) = x2/9에 대해 P(0<X<2)는 (0,2)에서의 x2/9의 적분값이므로 8/27이다. 누적분포함수(CDF) 확률변수 X에 대해 F(x) =

결합 확률밀도함수, 주변 확률밀도함수 [내부링크]

결합 확률밀도함수(joint probability density function) X와 Y의 결합 확률밀도함수 fX,Y(x,y)는 아래와 같이 정의됩니다. 확률밀도함수이므로 모든 값이 0 이상이여야 하며, 이산형일 경우 가능한 모든 경우를 더하면 1이고, 연속형인 경우 전 구간 적분을 취하면 값이 1이 돼야 합니다. ex) 4개의 빨간 공, 3개의 하얀 공, 2개의 검은 공이 들어 있는 주머니에서 3개의 공을 꺼낼 때, X는 하얀 공의 수, Y는 검은 공의 수라 하면, fX,Y(x,y)는 아래와 같이 나타납니다. 이 확률밀도함수의 함수값을 표로 나타내면 아래와 같게 나타납니다. X = 0 X = 1 X = 2 X = 3 Y = 0 4/84 18/84 12/84 1/84 Y = 1 12/84 24/84 6/84 0 Y = 2 4/84 3/84 0 0 ex) fX,Y(x,y) = xye-(x+y) (x > 0 , y > 0) 일 때, X ≥ 2Y일 확률은 면적분을 통해 계산할 수 있습니

파이썬의 숫자형, 문자열 자료형 [내부링크]

숫자형 자료형 - 숫자형은 숫자 형태로 이루어진 자료형으로, 정수, 실수, 8진수, 16진수 등이 존재한다. ex) 123, -345, 0, 123.45, 0xFF (16진수) 숫자형 활용을 위한 연산자 - 사칙연산 : +, -, *, / - 제곱 연산자: ** (ex. 2 ** 3 = 23 = 8) - 나머지 연산자: x % y는 x mod y를 나타냄 (ex. 11 % 3 = 2) - 몫 연산자: x // y는 x를 y로 나눈 몫을 나타냄 (ex. 11//3 = 3) 문자열 자료형 - 문자, 단어 등으로 구성된 문자들의 집합으로, 큰따옴표나 작은따옴표로 감싸서 만든다. ex) "Hello world", 'python is fun' - 여러 줄인 문자열을 변수에 대입하고자 할 때는 이스케이프 코드 \n을 삽입하거나 따옴표 3개를 사용한다. 문자열 연산 - 문자열 더해서 연결하기: print("안녕" + "하세요") → "안녕하세요" - 문자열 곱하기: print("그래"*3) →

문자열 관련 메소드들 [내부링크]

1. count - count 메소드는 문자열에서 특정 문자가 몇 번 존재하는지 출력하는 메소드이다. - 문자열.count(찾는 문자열)로 사용할 경우 전체 문자열에서 찾는 문자열이 몇 번 존재하는지 출력한다. - 문자열.count(찾는 문자열, 시작 인덱스)로 사용할 경우 문자열의 시작 인덱스부터 끝까지 몇 번 존재하는지 출력한다. - 문자열.count(찾는 문자열, 시작 인덱스, 마지막 인덱스)로 사용할 경우 시작 인덱스 이상 마지막 인덱스 미만의 인덱스에서 찾는 문자열이 몇 번 존재하는지 출력한다. s1 = "안녕하세요방가방가" c1 = s1.count('안') # 1 c2 = s1.count('방가') # 2 c3 = s1.count('방', 3,6) # 뒷 '방'은 인덱스가 8이므로 포함되지 않는다. 따라서 1 c4 = s1.count('하이') # 0 # 아래는 궁금해서 해본 것들 s2 = "bbbbb" c5 = s2.count('b') # 5 c6 = s2.count('

리스트 자료형 [내부링크]

리스트의 생성 및 사용 - 리스트를 사용하면 자료들의 모음을 간단하게 표현 가능하다. - 리스트명 = [요소1, 요소2, . . .]으로 생성함. list1 = [] # 빈 리스트 list2 = [1,2,3] list3 = ['안녕', '1', '2', '하세요'] # 자료의 종류 상관 X list4 = [1,2,['안','녕']] # 리스트를 요소로 가질 수 있음 리스트의 인덱싱, 슬라이싱 (1). 리스트의 인덱싱 - 첫 요소의 인덱스가 0이며, 뒤로 갈수록 1씩 증가한다. 또한 맨 뒤가 -1이며, 앞으로 갈수록 1씩 감소하는 음수 인덱스도 존재한다. (2). 리스트의 슬라이싱 - a[m:n]의 꼴로 슬라이싱하며, m 이상 n 미만의 인덱스를 가지는 요소를 리스트로 묶어 반환한다. m, n을 빈칸으로 두는 경우 인덱스의 처음부터/끝까지로 생각한다. - step을 추가하여 a[m:n:s]의 꼴로 사용 시 m 이상 n 미만의 인덱스를 가지는 요소를 s개씩 띄어서 골라서 반환한다. 이때

리스트에 사용 가능한 함수들 [내부링크]

1. append, extend 리스트에 요소를 추가하는 메소드이다. 1. append - 리스트명.append(요소)를 사용하면 리스트의 맨 뒷 인덱스에 요소를 추가한다. list1 = [1,2,3] list1.append(4) print(list1) # [1,2,3,4] list1.append([5,6]) print(list1) # [1,2,3,4,[5,6]] 으로, 5, 6이 추가되는 것이 아닌 [5,6]이 추가됨. # 여러 요소를 한 번에 추가할 때는 후에 설명할 extend()나 리스트의 덧셈을 이용한다. list2 = [1,2,3,4] list2 = list2 + [5,6] print(list2) # [1,2,3,4,5,6] 2. extend - 리스트명.extend(x)를 통해 리스트의 뒤에 리스트를 붙일 수 있다. 이때 x에는 리스트만 올 수 있다. list1 = [1,2,3] list1.extend([4,5]) print(list1) # [1,2,3,4,5] list

튜플 자료형 [내부링크]

튜플 - 튜플은 순서가 있는 자료의 집합으로, 리스트와는 다르게 값의 수정, 삭제가 불가능하다. - 튜플명 = (요소1, 요소2, . . .)의 꼴로 생성한다. 이때 괄호는 생략 가능하다. t1 = () # 빈 튜플 생성가능 t2 = (1,) # 1개의 요소만을 가지는 튜플을 생성할 때는 요소 뒤에 콤마가 붙어야 한다. t3 = (1,2,3) t4 = (1,2,3,('ab', 'cd')) # 다중 튜플이 가능하다. 튜플 다루기 - 튜플은 수정 및 삭제가 불가능하지만, 인덱싱, 슬라이싱, 연산, 길이 구하기가 가능하다. t1 = (1,2,3) print(t1[0]) # 1 print(t1[0:2]) # (1,2) t2 = (4,5) t3 = t1 + t2 # (1,2,3,4,5) t4 = t1*3 # (1,2,3,1,2,3,1,2,3) print(len(t1)) # 3 튜플의 활용 1. 여러 변수에 동시에 값 할당 - 변수1, 변수2, . . . , 변수n = 값1, 값2, . . .

백준 2480번: 주사위 세개 파이썬 풀이 [내부링크]

https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 2480번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 주사위 세개 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 22907 12639 11208 55.990% 문제 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰... www.acmicpc.net 2480번: 주사위 세개 난이도: 브론즈 4 소스코드: d1, d2, d3 = map(int, input().split()) dlist = sorted([d1,d2,d3]) if dlist[0] == dlist[1] == dlist[2]

1.3 조건부확률 개념들 [내부링크]

조건부 확률 사건 B가 일어났다는 조건하에 A가 일어날 조건부 확률을 P(A|B)라 하며, P(A ∩ B) / P(B)와 같다. 또한, 서로 배반인 두 사건 A1, A2에 대해 P(A1 U A2 | B) = P(A1 | B) + P(A2 | B)이다. 전확률공식 사건 B1~Bn 이 상호 배반이며 B1 U . . . U Bn = S일 때, 임의의 사건 A에 대해 아래 식이 성립함. 베이즈 정리 사건 B1~Bn 이 상호 배반이며 B1 U . . . U Bn = S일 때, P(Bj | A)는 아래와 같다. 독립 두 사건 A, B가 P(A ∩ B) = P(A)*P(B)를 만족하면 서로 독립이라고 한다. * 이를 확장하여 n개의 사건에 대해서도 적용 가능하다. 단, n개의 사건 중 k개(2≤k≤n)를 뽑는 모든 경우에 대해 위 내용이 성립하여야 한다.