[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
mongo
를 쳐서 >
꺾쇠가 나오면 설치 완료
print
를 사용
use
라는 명령어로 DB를 변경할 수 있다.
show dbs
show collections
db
{field: value}
형태db.collection.insertOne(document)
db.collection.insertMany([document,document])
_id
: 주요키(Primary key)와 같은 개념으로 명시하지 않으면 자동으로 ObjectId가 생성된다.
DB의 jstest
라는 콜렉션에 값을 넣고 확인해보자.
db.jstest.insertOne({name:'test', age:100, class:'de'})
db.jstest.insertOne({name:'mongo', class:'db'})
db.jstest.find()
insert하면 콜렉션을 생성치 않아도 자동으로 콜렉션이 생긴다
show collections
자바스크립트 명령어로 변수를 만들어서 값을 넣어줄 수도 있음
mutli
라는 콜렉션에 값들 입력
한 개 삽입할 경우
var lee = {name:'lee-ss', midterm:{kor:70, eng:100}, final : {kor:100, eng:90, math:20, sci:50}, class:'de'}
db.multi.insertOne(lee)
여러 값 삽입할 경우
db.multi.insertMany(
[
{name:'kim-sd', class:'ds', kor:100, eng:40, math: 100},
{name:'kang-hd', class:'ds', kor:88, eng:50, math:70}
])
RDBMS의 SELECT라고 생각하면 될듯
db.collection.find(query, projection)
{<filed>: {<opr>:<value>}}
cursor
var cursor = db.collection.find()
hasNext(), forEach(), toArray()
.. 등등위에서 multi
에 입력했던 값들을 조회해보자.
커서 사용
var cursor = db.multi.find()
cursor
여기서 다시 cursor
를 호출하면, 아무 것도 나오지 않음. 즉, 1회성이다.
커서를 사용치 않고도 조회할 수 있다.
db.multi.find()
db.multi.find({})
projection 사용
db.multi.find({},{name:1})
db.multi.find({},{_id:0,name:1})
db.multi.find({},{_id:0,name:true,midterm:1})
db.multi.find({class:'de'})
db.multi.find({class:'ds'})
db.multi.find({'midterm.kor':{$gt:50}})
$gt
는 grater than을 뜻한다. 따라서 중간고사에서 국어 성적이 50과 같거나 큰 것들을 조회하라는 의미다.
국어 점수가 존재하는 도큐먼트를 출력해보자
db.multi.find({kor: {$exists:true}})
db.multi.find({'midterm.kor': {$exists:true}})
$exists:true
는 해당 문서가 존재하는지 확인할 수 있는지 확인하는 명령어국어점수가 50점보다 크고, 100점보다 작은 도큐먼트 조회
$and
사용
db.multi.find({$and:[{kor:{$gt:50}},{kor:{$lt:100}}]})
하나의 도큐먼트에서 조건 명시
db.multi.find({kor:{$gt:50}, kor:{$lt:100}})
정렬하기
1은 ASC, -1은 DESC
형태 : db.collection.find().sort()
name을 기준으로 오름차순으로 정렬
db.multi.find().sort({name:1})
제한해서 출력하기
db.collection.find().limit()
이쁘게(정렬해서) 출력하기
db.collection.find().pretty()
참고 : https://docs.mongodb.com/manual/crud/#update-operations
사용 형태
db.collection.updateOne(filter, update, options)
db.collection.updateMany(filter, update, options)
db.collection.replaceOne(filter, update, options)
파라미터
filter
: 수정할 document를 찾는다.(find)update
: 수정될 내용
$set
options
: upsert, writeConcern,.. 등 다양한 옵션들을 명시name에 jeon이라는 값이 들어가는 문서를 찾아서 전동준으로 바꿔주자.
db.multi.updateOne({name:/jeon/},{$set:{name:'전동준'}})
db.multi.find({},{_id:0, name:1})
중간고사(midterm) 점수가 있는 모든 학생들의 class를 ‘graduated’로 바꾸자.
db.multi.updateMany({midterm: {$exists:true}},{$set: {class:'graduated'}})
기말고사(final) 점수가 있는 모든 학생들의 class를 ‘job’로 바꾸자.
db.multi.update({final: {$exists:true}}, {$set:{class:'job'}})
기말고사(final) 점수가 있는 도큐먼트 자체를 수정하자
db.multi.replaceOne({final:{$exists:true}},{class:'job'})
국어점수가 60점보다 적거나 같은 도큐먼트들을 찾아서, 국어 점수를 0점으로 만드는 자바스크립트 함수를 만들어 보시오. 함수 이름은 updateKor()
으로 만들고, 업데이트 된 결과를 리턴하시오.
function updateKor(){
var tmp = db.multi.updateMany({kor:{$lte:60}},{$set:{kor:0}})
return tmp
}
updateKor()
db.multi.find()
사용 형태
db.collection.deleteOne(filter, options)
db.collection.deleteMany(filter, options)
파라미터
filter
: 삭제할 document를 선택(find)options
: collation, writeConcern 등 다양한 옵션 명시name이 ‘전동준’ 인 도큐먼트 하나만 삭제하자.
db.multi.deleteOne({name:'전동준'})
class field가 존재하는 도큐먼드들을 모두 삭제하자.
db.multi.deleteMany({class:{$exists:true}})
db.myfriends.insertOne({name:'아이언맨', buddy:['토르','헐크','호크아이']})
db.myfriends.insertOne({name:'슈퍼맨', buddy:['배트맨','원더우먼','아쿠아맨','조커']})
updateOne을 사용해, 아이언맨의 친구(buddy)에 캡틴아메리카, 블랙위도우를 추가하자.
update Operator를 찾아서 사용해야한다.
$push
와 $each
사용
db.myfriends.updateOne(
{name:'아이언맨'},
{$push:{buddy:{$each:['캡틴아메리카','블랙위도우']}}}
)
updateOne을 사용해, 슈퍼맨의 친구 중 가장뒤에 있는 친구(조커)를 빼주자.
$pop
을 사용
db.myfriends.updateOne({name:'슈퍼맨'},{$pop:{buddy:1}})
$match
$match
$group
$project
$sort
$limit
$sum
$sum
예제 데이터1
db.multi.insertMany(
[
{name:'hong-gd', kor:100, eng:30, math:60},
{name:'kim-sd', kor:40, eng:70, math:100},
{name:'park-jy', kor:100, eng:100, math:100},
{name:'huh-jy', kor:100, eng:100, math:100},
{name:'lee-ss', kor:60, eng:100, math:70},
]
)
위 예제데이터를 사용해서, multi
컬렉션에서 kor
의 값이 70보다 큰(>) document를 가져와서 kor
값의 평균 점수를 내보자.
db.multi.aggregate(
// stage 1: $match -> multi collection에서 kor filed의 값이 70 보다 큰 doc을 가져와라
{$match:{kor:{$gt:70}}},
// stage 2: 가지고온 doc에서 kor field만 가져오자
{$project:{kor:1}},
// stage 3: $group -> 전체 다 하나로 그룹화(test라는 이름으로) => 평균 구하자. ($avg) // kor field의 평균
{$group:{_id:'test','average':{$avg:'$kor'}}}
)
kor의 값이 70보다 큰 경우는 100, 100 두개로 평균이 100으로 나온다.
$field
: 해당 field 값을 사용할 때.(=$$current.field
)해당 코드를 해석해보자.
db.multi.aggregate(
{$match:{name:/s/}},
{$group:{_id:'test', 'sum':{$sum:'$kor'}}}
)
multi
컬렉션에서 name에 s
가 들어가는 doc을 가져와서 test라는 이름으로 전체를 하나로 그룹화한 후, sum이라는 필드를 만들어 kor
의 합계를 넣어줘라는 뜻예제 데이터2
db.score.insertMany([
{name:"홍길동",kor:90,eng:80,math:98,test:"midterm"},
{name:"이순신",kor:100,eng:100,math:76,test:"final"},
{name:"김선달",kor:80,eng:55,math:67,test :"midterm"},
{name:"강호동",kor:70,eng:69,math:89,test:"midterm"},
{name:"유재석",kor:60,eng:80,math:78,test:"final"},
{name:"신동엽",kor:100,eng:69,math:89,test:"midterm"},
{name:"조세호",kor:75,eng:100,math:100,test:"final"}
])
db.score.aggregate()
find()
랑 똑같이 나온다.원하는 필드만 True로 해서 뽑아낼 수도 있음
db.score.aggregate(
{$project:{_id:0, name:1, kor:1, eng:1, math:1}}
)
국어점수가 80점보다 큰 경우만 출력
db.score.aggregate(
{$match:{kor:{$gt:80}}}
)
test
라는 필드에 있는 값을 기준으로 그룹해 주고(midterm, final), kor
필드에 있는 값을 가져와서 평균을 내라.
db.score.aggregate(
{$group:{_id:'$test','average':{$avg:'$kor'}}}
)
샤드(shard)란?
sharding
)을 통해 나누어진 블록들의 구간(혹은 Epoch)을 말한다.예제 데이터
db.score.insertMany([
{name:"홍길동",kor:90,eng:80,math:98,test:"midterm"},
{name:"이순신",kor:100,eng:100,math:76,test:"final"},
{name:"김선달",kor:80,eng:55,math:67,test :"midterm"},
{name:"강호동",kor:70,eng:69,math:89,test:"midterm"},
{name:"유재석",kor:60,eng:80,math:78,test:"final"},
{name:"신동엽",kor:100,eng:69,math:89,test:"midterm"},
{name:"조세호",kor:75,eng:100,math:100,test:"final"}
])
test
가 final인 doc 들의 이름, 국어, 영어를 출력하고 ‘국어와 영어의 합’도 같이 출력
함수 생성
function myMap(){
emit(this.score, {name:this.name, kor:this.kor, eng:this.eng, test:this.test});
}
function myReduce(key,values){
var result = {name:new Array(), kor:new Array(), eng:new Array(), total:new Array()}
values.forEach(function(val){
if(val.test == 'final'){
result.name += val.name + " ";
result.kor += val.kor + " ";
result.eng += val.eng + " ";
result.total += val.kor + val.eng + " ";
}
})
return result;
}
map, reduce, out
db.score.mapReduce(myMap, myReduce, {out: {replace:'myRes'}})
out값 확인
db.myRes.find();
activate
후 설치
pip install pymongo
모듈 호출
from pymongo import MongoClient
클라이언트 지정(둘 중 하나)
client = MongoClient('localhost', 27017)
client = MongoClient('mongodb://localhost:27017')
DB와 연결(둘 중 하나)
db = client.database명
db = client['database명']
Collection 연결(둘 중 하나)
collection = db.컬렉션명
collection = db['컬렉션명']
아까 위에서 저장해논 test
db에 있는 데이터들로 테스트해보자.
# pip install pymongo
from pymongo import MongoClient
# client = MongoClient('localhost', 27017)
client = MongoClient('mongodb://localhost:27017')
# db = client.test
db = client['test']
# collection = db.score
collection = db['score']
result = collection.find()
# print(result)
for res in result:
print(res)
모듈 호출
from pymongo import MongoClient
from pprint import pprint # pretty 프린트임(이쁘게 출력)
클라이언트 지정
client = MongoClient('localhost', 27017)
test
db와 연결
db = client.test
score
컬렉션과 연결
score = db.score
커서(curosr) 이용 조회
for문을 이용하지 않고 print(cursor)
를 하면 커서 객체가 출력된다.
cursor = score.find()
for doc in cursor:
pprint(doc)
{'_id': ObjectId('62297f7311e3e38b4885825b'),
'eng': 80.0,
'kor': 90.0,
'math': 98.0,
'name': '홍길동',
'test': 'midterm'}
, ..
{'_id': ObjectId('62297f7311e3e38b48858261'),
'eng': 100.0,
'kor': 75.0,
'math': 100.0,
'name': '조세호',
'test': 'final'}
국어 점수가 60점보다 큰 도큐먼트 전체 출력
kor_gt_60 = score.find({'kor':{'$gt':60}}, {'_id':0})
for doc in kor_gt_60:
print(doc)
{'name': '홍길동', 'kor': 90.0, 'eng': 80.0, 'math': 98.0, 'test': 'midterm'}
{'name': '이순신', 'kor': 100.0, 'eng': 100.0, 'math': 76.0, 'test': 'final'}
{'name': '김선달', 'kor': 80.0, 'eng': 55.0, 'math': 67.0, 'test': 'midterm'}
{'name': '강호동', 'kor': 70.0, 'eng': 69.0, 'math': 89.0, 'test': 'midterm'}
{'name': '신동엽', 'kor': 100.0, 'eng': 69.0, 'math': 89.0, 'test': 'midterm'}
{'name': '조세호', 'kor': 75.0, 'eng': 100.0, 'math': 100.0, 'test': 'final'}
참고 : https://pymongo.readthedocs.io/en/stable/api/pymongo/results.html#pymongo.results.InsertManyResult
score
컬렉션에 다음 조건의 데이터를 추가해보자.
모듈 호출 후 score
컬렉션에 접근
from pymongo import MongoClient
from pprint import pprint
client = MongoClient('localhost',27017)
db = client.test
score = db.score
데이터 삽입
result01 = score.insert_many(
[
{'name':'한지민', 'kor': 100, 'eng': 30, 'math': 50},
{'name':'송강', 'kor': 50, 'eng': 100, 'math': 70}
]
)
확인
cursor = score.find()
for doc in cursor:
print(doc)
이번에는 이름이 신민아, 국어점수 50, 영어점수 70, 수학점수 100 으로 데이터를 하나 삽입해보자.
result02 = score.insert_one({'name':'신민아','kor':50,'eng':70,'math':100})
<pymongo.results.InsertOneResult object at 0x000001F1A6E18A80>
622996b6cc3b36042ada59b1
확인해보자.
cursor = score.find()
for doc in cursor:
print(doc)
참고 : https://pymongo.readthedocs.io/en/stable/api/pymongo/results.html#pymongo.results.UpdateResult
이름(name)이 유재석인 도큐먼트를 찾아서 국어점수(kor)를 100점으로 변경하자.(doc 하나만 변경)
모듈 호출 후 score
컬렉션에 접근
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017')
db = client['test']
score = db['score']
수정
result01 = score.update_one({'name':'유재석'}, {'$set':{'kor':100}})
print(result01.matched_count)
print(result01.modified_count)
영어 점수가 80점보다 큰 사람들의 점수를 0점으로 바꿔보자.
result02 = score.update_many(
{'eng':{'$gt':80}},
{'$set': {'eng': 0}}
)
print(result02.matched_count)
print(result02.modified_count)
참고 : https://pymongo.readthedocs.io/en/stable/api/pymongo/results.html#pymongo.results.DeleteResult
이름이 유재석인 데이터를 삭제해보자.
result01 = score.delete_one({'name':'유재석'})
print(result01)
print(result01.deleted_count)
cursor = score.find()
for doc in cursor:
print(doc)
이번에는 test
필드가 없는 도큐먼트를 모두 삭제해보자.
result02 = score.delete_many({'test':{'$exists':False}})
print(result02)
print(result02.deleted_count)
<pymongo.results.DeleteResult object at 0x000001E91C1834C0>
3
참고
Pymongo에서 aggregation 값은 리스트 형태로 들어가야 한다.
국어 점수가 50점 보다 높은 데이터를 가져와서 id를 kor로 묶어주고 sum
이라는 필드를 만들어 국어점수를 모두 더해주자.
aggr = score.aggregate(
[
{'$match': {'kor': {'$gt':50}}},
{'$group': {'_id':'kor', 'sum':{'$sum':'$kor'}}}
]
)
print(aggr)
print(list(aggr))
<pymongo.command_cursor.CommandCursor object at 0x00000152B5894100>
[{'_id': 'kor', 'sum': 515.0}]
이전에 크롤링으로 스타벅스 전국 매장정보를 가지고 있는 json파일을 만들었다.
그 json 파일의 데이터를 가지고 실습해보자.
우선 데이터를 불러와야한다.
starbucks_all.json을 읽어온다.
읽어온 파일 한 줄 씩 json_data로 저장한다.
import json
with open('starbucks_all.json', 'r', encoding='utf-8') as f:
json_data = json.load(f)
json_data를 dictionary로 변환한다.(result_dict). 그리고 result_dict에 ‘list’라는 키를 입력하여, 리턴된 value를 반복문으로 출력하자.
result_dict = dict(json_data)
for data in result_dict['list']:
print(data)
잘 나온다.
이제 pymongo를 사용해 볼 차례다.
우선 MongoDB와 연결해보자.
db 는 test
, collection은 starbucks01
# 모듈 호출
from pymongo import MongoClient
# 클라이언트 지정
client = MongoClient('localhost', 27017)
# test라는 db
db = client.test
# test라는 db 안의 starbucks01이라는 collection
starbucks01 = db.starbucks01
데이터들을 저장하고 데이터를 출력
result = starbucks01.insert_many(result_dict['list'])
all = starbucks01.find({},{'_id':False})
for data in all:
print(data)
명령프롬프트(cmd)에서 확인해보자.
db.starbucks01.find()
이 데이터는 lat
, lot
라는 키값을 가지고 있다.(위도/경도)
그래서 GeoJSON파일을 만들어 볼 것이다.
매장명과 위 페이지에서 명시하는 데로 type과 coordinates를 구성했다.
import json
from pymongo import MongoClient
with open('starbucks_all.json', 'r', encoding='utf8') as file:
json_data = file.readline()
result_dict = json.loads(json_data)
geo_list = list()
for data in result_dict['list']:
geo_dict = dict()
geo_dict['s_name'] = data['s_name']
coordinates = [float(data['lot']),float(data['lat'])]
geo_dict['location'] = {'type': 'Point', 'coordinates':coordinates}
geo_list.append(geo_dict)
몽고DB에 삽입해주자.
client = MongoClient('localhost',27017)
db = client.test
starbucks02 = db.starbucks02
res = starbucks02.insert_many(geo_list)
print(len(res.inserted_ids))
CMD에서 확인해보자.
db.starbucks02.find({},{_id:0})
2dsphere인덱스를 생성한다.(숙제)
db.starbucks02.createIndex({location:'2dsphere'})
우리 동네인 안양역 위도경도를 구글맵에서 가져오자.
cmd창에서 밑의 코드를 실행해보자.
coordinates에 넣을 때 위도, 경도 위치 잘 확인해야한다! [위도,경도]
형태로 들어가야 함
db.starbucks02.find(
{
location:{
$near:{
$geometry:{
type:'Point',
coordinates:[126.92203909214015,37.4027748742088]
}
}
}
}
)
그러면 안양역과 가장 가까운 거리에 있는 순서대로 매장들이 나온다!
이번에는 500m 반경 내로 제한해보자.
$maxDistnace: 미터(m)
db.starbucks02.find(
{
location:{
$near:{
$geometry:{
type:'Point',
coordinates:[126.92203909214015,37.4027748742088]
},
$maxDistance: 500
}
}
}
)
그렇다면 현재 위치(안양역)부터 ~ ‘서울’이라는 단어가 포함된 좌표들의 거리를 보고싶으면 어떻게 해야할까?
db.starbucks02.aggregate([
{
$geoNear:{
near:{type:'Point', coordinates:[126.92203909214015,37.4027748742088]},
spherical: true,
query: {s_name:/서울/},
distanceField: 'distance'
}
}
])
관악서울대입구R
점이 매장명에서 ‘서울’이 들어간 곳 중 가장 가까운 매장인가보다.이번에는 안양역, 범계역, 평촌역 이렇게 삼각지대 안에 들어가는 스타벅스 매장을 찾아보고 싶다.
좌표
db.starbucks02.find(
{
location:{
$geoIntersects:{
$geometry:{
type: 'Polygon',
coordinates:[
[
[126.92204547048901,37.40273483013898],
[126.95060553998034,37.39009265979172],
[126.96476383067596,37.39475864453516],
[126.92204547048901,37.40273483013898]
]
]
}
}
}
}
)
이번에는 안양역을 기준으로 원을 그려서 그 안에 있는 매장들을 가져오자.
db.starbucks02.find(
{
location:{
$geoWithin:{
$centerSphere:[[126.92203909214015,37.4027748742088], 0.5/3963.2]
}
}
}
)
파일 및 폴더 생성
파일 시스템 탐색
도움말(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!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!