[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
머신러닝과 딥러닝을 사용할 수 있는 패키지이다!💭
Tensor
: 데이터를 저장하는 객체(placeholder)Variable
: Weight, BiasOperation
: H = W * X + b (node, 식) -> 그래프 (tensor -> operation -> tensor -> operation -> ,,,)Session
: 실행 환경아나콘다 가상환경을 사용할 것이므로, 아나콘다가 설치되어 있어야 한다.
conda create -n ai02 python=3.7 -y
Ctrl+Shift+P
로 해당 가상환경 터미널 띄우기
conda install tensorflow==1.15 -y
pip install tensorflow==1.15
X, y -> W * X + b <-(optimizer)-> (H, y) : loss function
모듈 호출
import tensorflow as tf
상수 노드를 생성
node = tf.constant(100)
session
사용
session
은 그래프를 실행시켜주는 역할(runner)이다.
.run()
을 통해 실행
sess = tf.Session()
print(sess.run(node))
결과
100
tf.constant()
는 노드에 상수값을 넣어주는 기능을 한다.
node1 = tf.constant(10, dtype=tf.float32) # 10 입력
node2 = tf.constant(20, dtype=tf.float32) # 20 입력
node3 = node1 + node2
dtype
은 텐서플로우 내부적으로 numpy
를 사용 중이여서 데이터 타입을 사용하는 것이다..Session()
사용
sess = tf.Session()
print(sess.run(node3)) # node1 + node2 = 10.0 + 20.0
print(sess.run([node1, node3])) [10.0, 30.0]
결과
30.0
[10.0, 30.0]
그리고 스크립트를 실행 시에 이러한 알림이 뜬다.
WARNING:tensorflow:From 02_tensor.py:13: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.
이럴 때는 import를 이렇게 하면 된다.
import tensorflow.compat.v1 as tf
placeholder
: 그래프를 실행하는 시점에 데이터를 입력받을 수 있도록 공간만 만들어 놓음
node1 = tf.placeholder(dtype=tf.float32)
node2 = tf.placeholder(dtype=tf.float32)
node3 = node1 + node2
# 값은 받지 않고 미리 노드들을 더해놓는다.
.Session()
객체 생성
sess = tf.Session()
만들어 놓은 공간에 data 입력
X = [10, 20, 30]
y = [40, 50, 60]
여기가 그래프를 실행하는 시점
feed_dict
를 사용해 데이터를 입력해줌
print(sess.run(node3, feed_dict={node1:X,node2:y}))
결과
[50. 70. 90.]
sklearn
을 사용할 때와 과정이 조금 다르다.
X = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
H(hypothesis) = W (weight) * X + b (bias)
# Weight 생성
W = tf.Variable(tf.random_normal([1]), name='weight')
# Bias 생성
b = tf.Variable(tf.random_normal([1]), name='bias')
H = W * X + b
.random_normal()
은 랜덤으로 표준분포 값을 설정해주는 놈이 단계에서는 loss function, optimizer, session이 준비되어야 한다.
loss function
MSE(Mean Square Error)
loss = tf.reduce_mean(tf.square(H - y))
optimizer
경사 하강법(gradient descent) : loss가 최소화 되는 값을 찾기
optimizer = tf.train.GradientDescentOptimizer(0.01)
여기서 0.01
은 learning rate
로 얼마큼씩 움직일 건지 알려준다.
train = optimizer.minimize(loss)
session
.Session()
객체 생성
sess = tf.Session()
여기서 그래프에 있는 모든 변수들을 초기화해줘야 한다. 이때 사용하는 것은 tf.global_variables_initializer()
sess.run(tf.global_variables_initializer())
과적합(overfitting)을 방지하기 위해 적절한 학습 횟수를 선정해야한다.
epochs = 5000
for step in range(epochs):
tmp, loss_val, W_val, b_val = sess.run([train, loss, W, b], feed_dict={X:[1,2,3,4,5],y:[3,5,7,9,11]})
if step % 100 == 0:
print(f'W:{W_val} \t b:{b_val} \t loss:{loss_val}')
loss_val, W_val, b_val
을 실행시키는 이유는 변하는 과정을 확인하기 위함
step % 1000 == 0
은 반복문 1000번마다 확인하기 위함
결과
W:[-0.07149309] b:[1.2598735] loss:75.4944076538086
W:[1.9927471] b:[1.0261854] loss:0.0001256559626199305
W:[1.9997544] b:[1.0008862] loss:1.4397728875792382e-07
W:[1.9999908] b:[1.0000327] loss:2.0108928411310956e-10
W:[1.999994] b:[1.0000207] loss:7.644303245957218e-11
가설 H와 데이터를 입력해주고 실행
print(sess.run(H, feed_dict={X:[10,11,12,13,14]}))
결과
[20.999962 22.999956 24.999949 26.999943 28.999937]
X_data는 세 번의 모의고사, y_data는 실제 시험 점수
X_data = [
[73, 80, 75],
[93, 88, 93],
[89, 91, 90],
[96, 89, 100],
[73, 66, 70]
]
y_data = [
[80],
[91],
[88],
[94],
[61]
]
placeholder
로 노드에 데이터가 들어갈 공간 만들어주기
X = tf.placeholder(shape=[None,3], dtype=tf.float32)
y = tf.placeholder(shape=[None,1], dtype=tf.float32)
데이터 타입은 실수형
여기서 shape
은 안에 들어갈 형태를 정해준다.
X와 W가 행렬 연산할 때 열과 행이 같아야 한다.
X의 형태가 [None, 3]
이므로 W에 [3,1]
로 들어가야 한다.
W = tf.Variable(tf.random_normal([3,1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
H = W * X + b
H = tf.matmul(X, W) + b
loss function
loss = tf.reduce_mean(tf.square(H - y))
optimizer
learning_rate = 0.00004
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)
session
sess = tf.Session()
# 변수초기화 진행
sess.run(tf.global_variables_initializer())
로스를 줄여나가는 과정을 확인하며 학습
epochs = 10000
for step in range(epochs):
_, loss_val, W_val, b_val = sess.run([train, loss, W, b], feed_dict={X:X_data, y:y_data})
if step % 1000 == 0:
print(f'W:{W_val} \t b:{b_val} \t loss:{loss_val}')
확인
W:[[2.2694695 ]
[0.02989042]
[0.5611059 ]] b:[-0.9297394] loss:47803.86328125
W:[[ 0.697498 ]
[ 0.49425066]
[-0.18740939]] b:[-0.9556813] loss:20.511674880981445
W:[[0.27228674]
[0.7211382 ]
[0.01448941]] b:[-0.97749513] loss:13.250178337097168
W:[[0.00078062]
[0.76103204]
[0.24469697]] b:[-0.9971895] loss:10.001592636108398
W:[[-0.20451084]
[ 0.7613147 ]
[ 0.44759852]] b:[-1.0140916] loss:7.903079986572266
W:[[-0.3688228 ]
[ 0.75436056]
[ 0.6169308 ]] b:[-1.0284728] loss:6.4997758865356445
W:[[-0.50251806]
[ 0.7470755 ]
[ 0.75628585]] b:[-1.0407374] loss:5.558919429779053
W:[[-0.6117952 ]
[ 0.7407622 ]
[ 0.87054116]] b:[-1.051257] loss:4.927996635437012
W:[[-0.70122147]
[ 0.73551846]
[ 0.964121 ]] b:[-1.0603446] loss:4.504866600036621
W:[[-0.77442473]
[ 0.7312137 ]
[ 1.0407418 ]] b:[-1.0682586] loss:4.221070289611816
100점, 80점, 87점일 경우를 예측
print(sess.run(H, feed_dict={X:[[100, 80, 87]]}))
결과
[[69.70761]]
X_data = [[공부시간, 과외점수]]
, y_data = [[0(합격)]or [1(불합격)]]
X_data =[
[1,0],
[2,0],
[5,1],
[2,3],
[3,3],
[8,1],
[10,0]
]
y_data = [
[0],
[1],
[0],
[0],
[1],
[1],
[1]
]
placeholder
로 데이터가 들어갈 공간만 만들어 놓는다.
X = tf.placeholder(shape= [None, 2], dtype=tf.float32)
y = tf.placeholder(shape= [None, 1], dtype=tf.float32)
shape
이 [None, 2]
인 이유는 X_data의 각 요소에는 요소가 2개씩 들어가기 때문이다.X와 y의 shape
에 맞춰 W와 b를 생성
W = tf.Variable(tf.random_normal([2,1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
.sigmoid()
: 0 ~ 1 사이의 실수로 판단
(H>0.5 : True) => 0 / 1
0, 1 로 결과를 확인하고 싶기 때문에 사용
logit = tf.matmul(X, W) + b
H = tf.sigmoid(logit)
loss function
loss 값을 미분했을 때 0이 되는 지점이 1개가 아닐 경우 사용
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=y))
optimizer
learning_rate = 0.1
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)
learning_rate
는 바꿔가면서 적절한 값을 찾아줘야 한다.session
sess = tf.Session()
sess.run(tf.global_variables_initializer())
epochs(횟수)는 10000번으로 설정하고 1000번 마다 변화 확인
epochs = 10000
for step in range(epochs):
_, loss_val, W_val, b_val = sess.run([train, loss, W, b], feed_dict={X:X_data,y:y_data})
if step % 1000 ==0:
print(f'W:{W_val} \t b:{b_val} \t loss:{loss_val}')
W:[[-0.52216065]
[-2.4144995 ]] b:[1.2521563] loss:3.6504814624786377
W:[[ 0.4028973 ]
[-0.05373459]] b:[-1.2234944] loss:0.5484178066253662
W:[[ 0.40911108]
[-0.04438331]] b:[-1.2662275] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422136]] b:[-1.2669672] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
W:[[ 0.40921867]
[-0.04422118]] b:[-1.2669675] loss:0.5483764410018921
X값으로 4시간 공부 + 2시간 과외받은 경우, 2시간 공부 + 4시간 과외인 경우를 넣어보자.
print(sess.run(H, feed_dict={X:[[4,2],[2,4]]}))
결과
[[0.5699053 ]
[0.34855092]]
X_data, y_data 준비
상중하를 나누기 위해 라벨링을 해줘야함. True/False로 따지게 하기 위해
이 형태를 one hot encoding 이라고 함
X_data =[
[10,7,8,3],
[8,8,9,4],
[7,8,2,3],
[6,3,9,3],
[7,6,7,5],
[3,5,6,2],
[2,4,3,1]
]
y_data =[
[1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0],
[0, 0, 1],
[0, 0, 1]
]
placeholder
로 데이터가 들어갈 공간을 만들자
X = tf.placeholder(shape=[None, 4], dtype=tf.float32)
y = tf.placeholder(shape=[None, 3], dtype=tf.float32)
W, b 설정
# 4개 요소가 값으로 들어가야 하고, 상/중/하로 표현하기 위해 [4,3]
W = tf.Variable(tf.random_normal([4,3]), name='weight')
b = tf.Variable(tf.random_normal([3]), name='bias')
가설 설정
logit = tf.matmul(X, W) + b
H = tf.nn.softmax(logit)
.nn.softmax()
loss function
softmax
에 맞게
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logit, labels=y))
optimizer
train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
session
sess = tf.Session()
sess.run(tf.global_variables_initializer())
3000번 반복 학습
for step in range(3000):
_, cost_val = sess.run([train, loss], feed_dict={X:X_data, y:y_data})
if step % 300 == 0:
print(f'cost:{cost_val}')
cost:9.24937915802002
cost:1.0242544412612915
cost:0.43915197253227234
cost:0.34667593240737915
cost:0.2936878502368927
cost:0.25652530789375305
cost:0.22818665206432343
cost:0.20555634796619415
cost:0.18694519996643066
cost:0.17132094502449036
쪽지시험 점수가 4, 9, 8, 5일 경우 수준 예측
print(sess.run(H, feed_dict={X:[[4,9,8,5]]}))
결과
[[1.6871903e-05 2.9129526e-05 9.9995399e-01]]
하
라고 예측한다.X_data, y_data 준비
X_data = [
[0,0],
[0,1],
[1,0],
[1,1]
]
y_data = [
[0],
[1],
[1],
[0]
]
.placeholder()
로 데이터가 들어갈 공간 만들어주기
X = tf.placeholder(shpae=[None, 2], dtype=tf.float32)
y = tf.placeholder(shape=[None, 1], dtype=tf.float32)
W, b 설정
W = tf.Variable(tf.random_normal([2,1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
sigmoid 사용 가설 설정
logit = tf.matmul(X, W) + b
H = tf.sigmoid(logit)
loss function
nn.sigmoid_cross_entropy_with_logits()
사용
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=y))
optimizer
learning_rate = 0.1
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(loss)
session
.Session()
으로 세션 객체 생성 후 변수 초기화
sess = tf.Session()
sess.run(tf.global_variables_initializer())
학습 횟수 100000회(epochs)로 설정하고 10000회때 마다 W,b,loss 값 확인
epochs = 100000
for step in range(epochs):
_, loss_val, W_val, b_val = sess.run([train, loss, W, b], feed_dict={X:X_data, y:y_data})
if step % 10000 == 0:
print(f'W:{W_val} \t b:{b_val} \t loss:{loss_val}'
W:[[0.35206455]
[0.32194328]] b:[-0.584604] loss:0.7081718444824219
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
W:[[1.7762821e-07]
[1.7756454e-07]] b:[-1.4846731e-07] loss:0.6931471824645996
X_data 그대로 넣어서 예측시켜보자
print(sess.run(H, feed_dict={X:X_data}))
결과
[[0.49999997]
[0.5 ]
[0.5 ]
[0.50000006]]
XOR문제를 잘 판단하지 못했다. 0,1,1,0이어야 하는데 0,1,1,1이 나와버렸다.
이럴 때는 딥러닝을 사용해야 한다.
머신러닝에서의 XOR 데이터를 그대로 써준다.
X_data = [
[0,0],
[0,1],
[1,0],
[1,1]
]
y_data = [
[0],
[1],
[1],
[0]
]
.placeholder()
X = tf.placeholder(shape=[None, 2], dtype=tf.float32)
y = tf.placeholder(shape=[None, 1], dtype=tf.float32)
입력층 : 2개를 넣어서 10개를 내보낼 것
W1 = tf.Variable(tf.random_normal([2,10]), name='weight1')
b1 = tf.Variable(tf.random_normal([10], name='bias1'))
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)
히든층 1
입력층에서 내보낸 10개를 받아 20개로 내보낼 것
레이어 생성 시 X가 layer1로 들어가야함
W2 = tf.Variable(tf.random_normal([10, 20]), name='weight2')
b2 = tf.Variable(tf.random_normal([20]), name='bias2')
layer2 = tf.sigmoid(tf.matmul(layer1, W2) + b2)
히든층 2
히든층1에서 내보낸 20개를 받아 10개로 내보낼 것
레이어 생성 시 X가 layer2로 들어가야함
W3 = tf.Variable(tf.random_normal([20, 10]), name='weight3')
b3 = tf.Variable(tf.random_normal([10]), name='bias3')
layer3 = tf.sigmoid(tf.matmul(layer2, W3) + b3)
출력층
y값이 1개.출력을 1개 받기로 했기 떄문에 내보내는 것을 1개로 설정
layer3를 받아줘야 함
W4 = tf.Variable(tf.random_normal([10,1]), name='weight4')
b4 = tf.Variable(tf.random.normal([1]), name='bias4')
logit = tf.matmul(layer3, W4) + b4
H = tf.sigmoid(logit)
loss function
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=y))
optimizer
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)
session
sess = tf.Session()
sess.run(tf.global_variables_initializer())
10000번 학습, 1000번 마다 확인
for step in range(10000):
_, loss_val = sess.run([train, loss], feed_dict={X:X_data, y:y_data})
if step % 1000 == 0:
print(f'loss: {loss_val}')
loss: 1.289193868637085
loss: 0.5938982367515564
loss: 0.04909735172986984
loss: 0.015268374234437943
loss: 0.008632145822048187
loss: 0.0059454115107655525
loss: 0.004510801751166582
loss: 0.0036234448198229074
loss: 0.0030221338383853436
loss: 0.002588545437902212
기존 데이터로 예측
print(sess.run(H, feed_dict={X:X_data}))
[[0.00150782]
[0.9961239 ]
[0.99868464]
[0.00233424]]
정확도 평가
# 0.5보다 클 경우 True가 나오도록 조건 적용(sigmoid)
predict = tf.cast(H > 0.5, dtype=tf.float32)
# 바꿔지는 값과 실제 y값과 비교
correct = tf.equal(predict, y)
# 그걸 다시 1이랑 0으로 바꿔서 평균을 내줌
accuracy = tf.reduce_mean(tf.cast(correct, dtype=tf.float32))
print(sess.run(accuracy, feed_dict={X:X_data, y:y_data}))
1.0
위키 : https://ko.wikipedia.org/wiki/MNIST_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4
mnist 손글씨 하나의 이미지 크기는 28 * 28
mnist 데이터는 0~9까지의 손글씨 데이터
모듈 호출
import tensorflow as tf
from tensorflow_core.examples.tutorials.mnist import input_data
mnist 데이터 불러와서 X, y에 데이터가 들어갈 공간 만들기
mnist = input_data.read_data_sets('data/mnist/',one_hot=True)
# mnist 손글씨 하나의 이미지 크기는 28 * 28
X = tf.placeholder(shape = [None, 784], dtype = tf.float32)
# 0~9 까지 숫자 손글씨 이기에 10
y = tf.placeholder(shape = [None, 10], dtype=tf.float32 )
활성화 함수 relu
사용
입력층
W1 = tf.Variable(tf.random_normal([784, 256]), name='weight1')
b1 = tf.Variable(tf.random_normal([256]), name='bias1')
layer1 = tf.nn.relu(tf.matmul(X, W1) + b1)
히든층
W2 = tf.Variable(tf.random_normal([256,256]), name='weight2')
b2 = tf.Variable(tf.random_normal([256]), name='bias2')
layer2 = tf.nn.relu(tf.matmul(layer1, W2) + b2)
출력층
W3 = tf.Variable(tf.random_normal([256, 10]), name='weight3')
b3 = tf.Variable(tf.random_normal([10]), name='bias3')
logit = tf.matmul(layer2, W3) + b3
H = tf.nn.relu(logit)
loss function
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logit, labels=y))
optimizer
Adam 사용
train = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
session
sess = tf.Session()
sess.run(tf.global_variables_initializer())
총 학습 횟수 30회, 학습 한번 당 배치사이즈 100으로 설정
num_of_epoch = 30
batch_size = 100
for step in range(num_of_epoch):
total_iter = int(mnist.train.num_examples / batch_size)
for i in range(total_iter):
batch_x, batch_y = mnist.train.next_batch(batch_size)
_, loss_val = sess.run([train, loss], feed_dict={X:batch_x, y:batch_y})
if step % 3 == 0:
print(f'loss : {loss_val}')
predict = tf.arg_max(H, 1)
correct = tf.equal(predict, tf.arg_max(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, dtype=tf.float32))
print(f'acc: {sess.run(accuracy, feed_dict={X:mnist.test.images, y:mnist.test.labels})}')
acc: 0.9516000151634216
번외로 활성화함수 그래프 그리는 것도 보여주심
import numpy as np
import matplotlib.pyplot as plt
def sigmoid():
x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))
plt.plot(x, y, 'black', linewidth=3)
plt.xlim(-10, 10)
plt.ylim(-1, 2)
plt.grid(True)
plt.show()
def softmax(x1,x2,x3):
y = np.exp(x1) + np.exp(x2) + np.exp(x3)
return np.exp(x1) / y, np.exp(x2) / y, np.exp(x3)
def softmax_test():
x1 = np.linspace(-5, 5, 20)
x2 = np.linspace(-5, 5, 20)
# x3 = 1로 고정
y = np.zeros([20, 20, 3])
for i in range(20):
for j in range(20):
y[i, j, :] = softmax(x1[i], x2[j], 1)
m_x1, m_x2 = np.meshgrid(x1, x2)
plt.figure(figsize=(8, 3))
for i in range(2):
ax = plt.subplot(1, 2, i+1, projection='3d')
ax.plot_surface(m_x1, m_x2, y[:, :, i], rstride=1, cstride=1, alpha=0.3, color='blue', edgecolor='black')
ax.set_xlabel('x1',fontsize=14)
ax.set_ylabel('y1', fontsize=14)
ax.view_init(40, -125)
plt.show()
def gauss(x, mu, sigma, a):
return a * np.exp(-(x - mu) ** 2 / sigma ** 2)
def gauss_test():
x = np.linspace(-4, 8, 100)
plt.plot(x, gauss(x, 0, 1, 1), 'red', linewidth=3, label='y=exp(-x^2)')
plt.plot(x, gauss(x, 2, 3, 0.5), 'blue', linewidth=3, label='y=0.5exp(-(x-2)^2 / 3^2')
plt.legend(loc='upper left')
plt.xlim(-4, 8)
plt.ylim(-0.5, 1.5)
plt.grid(True)
plt.show()
if __name__ == '__main__':
sigmoid()
softmax_test()
gauss_test()
sigmoid
softmax
gauss
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!