[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
spark.sql("ANSI SQL")
myRange = spark.range(1000).toDF("number")
myRange.head(10)
myRange.tail(10)
divisBy2 = myRange.where("number % 2 = 0")
divisBy2.head(5)
divisBy2.tail(5)
기존에 저장해놓은 csv파일 불러오기
flights2010 = spark.read.csv("/home/big/data/flights/csv/2010-summary.csv")
flights2010.printSchema()
flights2010.take(5)
printSchema()
로 구조 확인
컬럼명을 지정해주지않으면 자동으로 지정해줌(ex) c0, c1)
맨 첫 row는 컬럼명으로 생각된다.
flights2010 = spark.read.option("header","true").csv("/home/big/data/flights/csv/2010-summary.csv")
flights2010.printSchema()
flights2010.take(5)
header를 지정해주니 맨 첫줄의 값이 컬럼명으로 지정된다.
flights2010.sort("count").explain()
explain()
: 실행계획을 볼 수 있음.
이번에는 2015년도 비행운행정보 json파일을 가져오자.
f2015 = spark.read.format("json").load("/home/big/data/flights/json/2015-summary.json")
f2015.show()
show()
: 데이터베이스처럼 로우 x 컬럼 형태로 출력해줌(디폴트 20개)df.show(df)
f2015.createOrReplaceTempView("flights2015")
sqls = spark.sql("""
SELECT DEST_COUNTRY_NAME, COUNT(*)
FROM flights2015
GROUP BY DEST_COUNTRY_NAME
""")
sqls.show()
spark.sql
안에 ANSI표준 쿼리를 이용해서 sql명령을 작성했다.dfs = f2015.groupBy("DEST_COUNTRY_NAME").count()
dfs.show()
sqls.explain()
dfs.explain()
spark.sql("SELECT MAX(COUNT) FROM FLIGHTS2015").take(1)
from pyspark.sql.functions import max
f2015.select(max("count")).take(1)
pyspark.sql.functions
모듈에 ansi표준 쿼리에 대한 내용들이 들어있다.f2015.select("DEST_COUNTRY_NAME").show(5)
spark.sql("SELECT DEST_COUNTRY_NAME FROM flights2015 LIMIT 5").show()
spark.sql("SELECT DEST_COUNTRY_NAME, ORIGIN_COUNTRY_NAME FROM flights2015 LIMIT 5").show()
f2015.select("DEST_COUNTRY_NAME","ORIGIN_COUNTRY_NAME").show(5)
,
(COMMA)를 이용from pyspark.sql.functions import expr, col
f2015.select(expr("DEST_COUNTRY_NAME"), col("DEST_COUNTRY_NAME")).show(5)
pyspark.sql.functions
모듈을 사용해보자.f2015.select(expr("DEST_COUNTRY_NAME as destination")).show(5)
f2015.select(col("DEST_COUNTRY_NAME").alias("destination")).show(5)
spark.sql("SELECT DEST_COUNTRY_NAME destination FROM flights2015 LIMIT 5").show()
spark.sql
을 사용해 ansi표준쿼리로 위와 같은 코드를 짜보았다.f2015.selectExpr("DEST_COUNTRY_NAME as destination").show(5)
df.selectExpr()
을 사용해도 select를 하면서 alias등 표현식을 사용할 수 있다.f2015.selectExpr("*","(DEST_COUNTRY_NAME = ORIGIN_COUNTRY_NAME) as domestic_flight").show()
spark.sql("SELECT AVG(COUNT), COUNT(DISTINCT(DEST_COUNTRY_NAME)) FROM flights2015").show()
f2015.selectExpr("AVG(COUNT)", "COUNT(DISTINCT(DEST_COUNTRY_NAME))").show()
# literal = 값 자체
from pyspark.sql.functions import lit
f2015.select(expr("*"), lit(1).alias("one")).show(5)
spark.sql("SELECT *, 1 as one FROM flights2015 LIMIT 5").show()
f2015.withColumn("DOMESTIC_FLIGHT", expr("DEST_COUNTRY_NAME = ORIGIN_COUNTRY_NAME")).show()
withColumn
은 select *
과 같다.f2015.withColumnRenamed("DEST_COUNTRY_NAME", "DESTINATION").show()
withColumnRenamed
는 원본의 컬럼명을 바꿔주는 메서드f2015.drop("count").show()
f2015.drop("count").columns
drop()
은 컬럼을 삭제.columns
로 현재 있는 컬럼명들을 볼 수 있다.f2015.withColumn("count2", col("count").cast("string")).summary()
f2015.withColumn("count2", col("count").cast("string")).show()
spark.sql("SELECT *, CAST(COUNT AS STRING) AS COUNT2 FROM FLIGHTS2015").show()
cast()
: 컬럼을 복제하면서 속성을 바꿔줌(str)f2015.filter(col("count") < 2).show(5)
f2015.where("count < 2").show(5)
spark.sql("SELECT * FROM flights2015 WHERE count < 2 LIMIT 5").show()
filter()
: WHERE절과 같이 조건을 걸 수 있음# WHERE가 동시에 실행된다.
f2015.where(col("count") < 2).where(col("ORIGIN_COUNTRY_NAME") != "Croatia").show(5)
spark.sql("SELECT * FROM FLIGHTS2015 WHERE COUNT < 2 AND ORIGIN_COUNTRY_NAME != 'Croatia' LIMIT 5").show()
where().where()
f2015.select("DEST_COUNTRY_NAME").distinct().count()
spark.sql("SELECT COUNT(DISTINCT(DEST_COUNTRY_NAME)) FROM FLIGHTS2015").show()
distinct()
는 중복되는 값들을 제거해준다.count()
는 개수를 셀 때 사용from pyspark.sql import Row
new_rows = [
Row("Korea","Korea",5),
Row("Korea","Wakanda",1)
]
rdd_rows = sc.parallelize(new_rows)
schema = f2015.schema
df_rows = spark.createDataFrame(rdd_rows, schema)
df_rows.show()
# f2015와 df_rows를 union하고, count = 1이고 origin~ us가 아닌 데이터를 출력하자.
f2015.union(df_rows).where("count=1").where(col("ORIGIN_COUNTRY_NAME") != "United States").show()
union()
으로 데이터프레임 두 개를 합친다.where().where()
로 해결f2015.sort("count").show(f2015.count())
f2015.orderBy(col("count").asc()).show(f2015.count())
spark.sql("SELECT * FROM FLIGHTS2015 ORDER BY COUNT ASC").show(f2015.count())
# DEST ~ 내림차순, COUNT는 오름차순 정렬 후 5개만 출력
f2015.orderBy(col("DEST_COUNTRY_NAME").desc(), col("count").asc()).show(5)
spark.sql("SELECT * FROM FLIGHTS2015 ORDER BY DEST_COUNTRY_NAME DESC, COUNT ASC LIMIT 5").show()
f2015.limit(5).show()
.limit()
도 사용할 수 있음이번엔 새로운 데이터를 가지고 다뤄보았다.
retails = spark.read.format("csv").option("header","true").option("inferSchema", "true").load("/home/big/data/retails/2010-12-01.csv")
retails.printSchema()
printSchema()
를 사용해 구조 확인retails.createOrReplaceTempView("retails")
retails.show()
spark.sql("SELECT * FROM retails").show()
spark.sql
방식도 사용하기 위해 테이블을 생성해준다.retails.where(col("InvoiceNo") != 536365).select("InvoiceNo", "Description").show(5)
retails.where("InvoiceNo <> 536365").show(5, False)
show(,False)
를 하면 생략되어있는 내용까지 나온다.from pyspark.sql.functions import instr
priceFilter = col("UnitPrice") > 600
descriptFilter = instr(retails.Description, "POSTAGE") >= 1
retails.where(retails.StockCode.isin("DOT")).where(priceFilter | descriptFilter).show()
spark.sql("""
SELECT * FROM retails
WHERE StockCode in ('DOT')
AND (UnitPrice > 600 OR INSTR(Description, 'POSTAGE') >= 1)
""").show()
|
는 or과 같음dotCodeFilter = col("StockCode") == "DOT"
priceFilter = col("UnitPrice") > 600
descriptFilter = instr(col("Description"), "POSTAGE") >= 1
retails.withColumn("isExpensive", dotCodeFilter & (priceFilter | descriptFilter)).where("isExpensive")\
.select("UnitPrice", "isExpensive").show(5)
spark.sql("""
SELECT UnitPrice, (StockCode = 'DOT' AND (UnitPrice > 600 OR INSTR(Description, 'POSTAGE') >= 1)) as isExpensive
FROM retails
WHERE (StockCode = 'DOT' AND (UnitPrice > 600 OR INSTR(Description, 'POSTAGE') >= 1))
""").show()
isExpensive
컬럼을 추가했다.withColumn
은 새 컬럼을 추가할 때 사용# (현재 갯수 * 가격)^2 + 5
from pyspark.sql.functions import pow
quantity = pow(col("Quantity") * col("UnitPrice"), 2) + 5
retails.select(col("CustomerId"), quantity.alias("myQuantity")).show(5)
spark.sql("""
SELECT CustomerId, (POWER((Quantity * UnitPrice), 2) + 5) as myQuantity
FROM retails
LIMIT 5
""").show()
pyspark.sql.functions
모듈의 pow
함수를 이용해 제곱을 할 수 있다.POWER
를 사용하면 제곱을 할 수 있다.from pyspark.sql.functions import round, bround
retails.select(round(lit("2.5")), bround(lit("2.5")), lit("2.5")).show(5)
spark.sql('SELECT ROUND(2.5), BROUND(2.5) FROM retails').show(5)
round(), bround()
를 사용해서 반올림, 내림을 할 수 있다.retails.describe().show()
from pyspark.sql.functions import count, mean, stddev_pop, min, max
retails.select(count("UnitPrice"), mean("UnitPrice"), stddev_pop("UnitPrice"), min("UnitPrice"), max("UnitPrice")).show()
pyspark.sql.functions
모듈에서 이 함수들을 가져와 사용해도 된다.from pyspark.sql.functions import monotonically_increasing_id
retails.select("*", monotonically_increasing_id()).show(5)
monotonically_increasing_id()
from pyspark.sql.functions import initcap
retails.select(initcap(col("Description"))).show()
initcap()
show(,False)
from pyspark.sql.functions import lower, upper
retails.select(col("Description"), lower(col("Description")), upper(col("Description"))).show(5, False)
lower()
, 대문자로 만드는 upper()
from pyspark.sql.functions import ltrim, rtrim, trim, lpad, rpad
retails.select(ltrim(lit(' hello ')).alias("ltrim"), rtrim(lit(' hello ')).alias("rtrim"), trim(lit(" hello ")).alias("trim"), lpad(lit("hello"), 10, '*'), rpad(lit("hello"), 10, '*')).show(1)
spark.sql("""
SELECT LTRIM(' hello ') as ltrim, RTRIM(' hello ') as rtrim, TRIM(' hello ') as trim, LPAD('hello', 10, '*') as lpad, RPAD('hello', 10, '*') as rpad
FROM retails
""").show(1)
ltrim()
: 왼쪽 공백 없애기rtrim()
: 오른쪽 공백 없애기trim()
: 양쪽 공백 없애기\t
)은 지워지지 않는다!lpad()
: 오른쪽으로 정렬 후 왼쪽 공백 채우기rpad()
: 왼쪽으로 정렬 후 오른쪽 공백 채우기\from pyspark.sql.functions import regexp_replace
regex_str = "BLACK|WHITE|RED|GREEN|BLUE"
retails.select(regexp_replace(col("Description"), regex_str, "COLOR").alias("color"), col("Description")).show(5, False)
spark.sql("""
SELECT REGEXP_REPLACE(Description, 'BLACK|WHITE|RED|GREEN|BLUE', 'COLOR') as color, Description
from retails
""").show(5, False)
regexp_replace()
: 컬럼 선택 후 정규식에 맞게 선택 해서 새 컬럼을 만들어줌from pyspark.sql.functions import translate
retails.select(translate(col("Description"), "ABCD", "1234"), col("Description")).show(5, False)
translate()
from pyspark.sql.functions import regexp_extract
extract_str = "(BLACK|WHITE|RED|GREEN|BLUE)"
retails.select(regexp_extract(col("Description"), extract_str, 1).alias("extract"), col("Description")).show(5, False)
regexp_extract()
containsBlack = instr(col("Description"), "BLACK") >= 1
containsWhite = instr(col("Description"), "WHITE") >= 1
retails.withColumn("hasBlackWhite", containsBlack | containsWhite).select("Description", "hasBlackWhite").show(5, False)
withColumn()
를 사용했다.이번에는 날짜를 다뤄보자.
from pyspark.sql.functions import current_date, current_timestamp
date_df = spark.range(10).withColumn("today_date", current_date()).withColumn("now_timestamp", current_timestamp())
date_df.show()
current_date(), current_timestamp()
: 현재 날짜(년,월,일)과 현재 시간(년,월,일,시,분,초)를 가져오는 메서드date_df.createOrReplaceTempView("dateTable")
spark.sql("SELECT * FROM dateTable").show()
from pyspark.sql.functions import date_add, date_sub
date_df.select(date_sub(col("today_date"),5), date_add(col("today_date"), 5)).show(1)
spark.sql("SELECT DATE_SUB(today_date, 5) as sub, DATE_ADD(today_date, 5) as add FROM dateTable").show(1)
date_add()
: 날짜를 더하기date_sub()
: 날짜를 빼기from pyspark.sql.functions import datediff, months_between, to_date
date_df.withColumn("week_ago", date_sub(col("today_date"), 7)).select(datediff(col("week_ago"), col("today_date"))).show(1)
date_df.select(to_date(lit("2022-03-15")).alias("now"), to_date(lit("2022-05-13")).alias("end")).select(months_between(col("now"), col("end"))).show(1)
datediff()
: 두 개의 날짜의 일수 차이를 구하는 메서드months_between()
: 두 날짜의 개월 수 차이를 출력date_df.select(to_date(lit('2022-12-32'))).show(1)
null
값이 리턴된다.# simpleDateFormat (java)
dateFormat = 'yyyy-dd-MM'
clean_date = spark.range(1).select(to_date(lit('2022-11-12'), dateFormat).alias('date'))
clean_date.show()
2022-12-11
로 나온다.Null 관련 함수들을 다뤄보자.
null_df = sc.parallelize(
[
Row(name='Kang', phone='010-0000-0000', address='Seoul'),
Row(name='Shin', phone='010-1111-1111', address=None),
Row(name='You', phone=None, address=None)
]
).toDF()
null_df.show()
null_df.createOrReplaceTempView("nullTable")
spark.sql("SELECT * FROM nullT")
.toDF()
를 사용해 DataFrame으로 만들었다.from pyspark.sql.functions import coalesce
null_df.select(coalesce(col("address"), col("phone")).alias("coalesce")).show()
coalesce()
: null이 아닌 첫 번째 컬럼 값을 출력한다.# coalesce외에 null과 관련된 함수들
spark.sql("""
SELECT IFNULL(NULL, 'VALUE'), NULLIF('SAME','SAME'), NULLIF('SAME','NOTSAME'), NVL(NULL, 'VALUE'), NVL2(NULL, 'VALUE', 'VALUE2'), NVL2('NOTNULL', 'VALUE', 'VALUE2')
FROM nullTable
""").show(1)
ifnull
: 첫 번째 값이 null이면 두번째 값 returnnullif
: 두 값이 같으면 nullnvl
: 첫 번째 값이 null이면 두 번째 값 returnnvl2
: 첫 번째 값이 null이면 두 번째 값, 아니면 세번째 값 return# DataFrameNaFunction : drop
null_df.count() # 3
null_df.na.drop().count() # 1
null_df.na.drop('any').count() # 1
null_df.na.drop('all').count() # 3
null_df.na.drop('all', subset=['phone']).count() # 2
null_df.na.drop('all', subset=['address']).count() # 1
null_df.na.drop('all', subset=['phone', 'address']).count() # 2
na.drop()
: null값이 존재하면 삭제?(제외) 해버린다.'all'
이나 'any'
가 들어갈 수 있다.na.drop('any')
: null 값이 하나라도 존재한다면 삭제na.drop('all')
: 모든 값이 null값이면 삭제subset=['컬럼명']
속성을 사용해서 특정 컬럼 값이 null 값인 것을 삭제할 수 있다.# DataFrameNaFunction : fill
null_df.na.fill('n/a').show()
null_df.na.fill('n/a', subset=['name','address']).show()
fill_cols_val = {"phone": "070-000-0000", "address":"street"}
null_df.na.fill(fill_cols_val).show()
na.fill()
: null값이 존재하면 지정한 값으로 채워주기# DataFrameNaFunction : replace
null_df.na.replace(["Seoul"], ["서울"], "address").show()
구조체 : dataframe 안에 dataframe
retails.selectExpr("(Description, InvoiceNo) as complex", "*").show(5, False)
from pyspark.sql.functions import struct
complex_df = retails.select(struct("Description", "InvoiceNo").alias("complex"))
complex_df.createOrReplaceTempView("complexdf")
spark.sql('SELECT * FROM complexdf').show()
struct()
: 컴플렉스 타입으로 컬럼들을 묶어버림complex_df.select("complex").show(5, False)
# Description만 가져오기
complex_df.select("complex.Description").show(5, False)
# InvoiceNo만 가져오기
complex_df.select(col("complex").getField("InvoiceNo")).show(5, False)
getField()
: 특정 컬럼을 가져오는 함수complex_df.select("complex.*").show(5,False)
"컬럼명.*"
을 사용하면 묶여있던 컬럼들이 다 조회된다.다시 기존 데이터를 사용해서 배열 가지고 놀아보자.
여기서는 spark자체의 배열 함수를 사용하기 때문에 sql문으로 따로 사용할 수 없다고한다.
from pyspark.sql.functions import split
retails.select(split(col("Description"), " ")).show(5, False)
retails.select(split(col("Description"), " ").alias("arrays")).selectExpr("arrays[0]").show(5)
split()
: 설정한 것을 기준으로 자름(여기서는 공백)from pyspark.sql.functions import size
retails.select(size(split(col("Description"), " ")).alias("array_size")).show(5)
size()
: 해당 배열의 길이(갯수)를 가져오는 함수from pyspark.sql.functions import array_contains
retails.select(array_contains(split(col("Description"), " "), "WHITE")).show(5)
array_contains()
: 배열에 해당 값이 존재하는지 확인하는 함수from pyspark.sql.functions import create_map
retails.select(create_map(col("StockCode"), col("Description")).alias("complex_map")).show(5, False)
retails.select(create_map(col("StockCode"), col("Description")).alias("complex_map")).selectExpr("complex_map['84406B']").show()
create_map()
: 키와 밸류의 한쌍으로 만들어주는 함수84406B
)을 넣어서 데이터를 조회하면 해당되는 value값이 나온다.사용자 정의함수
def power3(value):
return value**3
# user define function
from pyspark.sql.functions import udf
pow3 = udf(power3)
user_def_df = spark.range(5).toDF("num")
user_def_df.select(pow3(col("num")), col("num")).show()
power3
를 만들었다.udf()
: 이 함수는 사용자 정의 함수를 만들어주는 함수모든 retails 데이터를 가져와서 묶어서 또 다뤄보자.
retails_all = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/home/big/data/retails/*.csv")
retails_all.count()
retails_all.printSchema()
retails_all.createOrReplaceTempView("retailsAll")
retailsAll
이라는 테이블을 생성해주자.retails_all.
을 적고 탭을 두번 누르면 사용할 수 있는 함수가 모두 나온다.여러가지 조회와 집계 함수 등을 다뤄보자.
from pyspark.sql.functions import count
retails_all.select(count("StockCode")).show()
spark.sql("SELECT COUNT(*) FROM retailsALL").show()
from pyspark.sql.functions import countDistinct
retails_all.select(countDistinct("*").alias("countDistinct")).show()
spark.sql("SELECT COUNT(DISTINCT(*))) AS COUNTDISTINCT FROM retailsAll").show()
countDistinct()
: 중복되는 값을 제하고 개수를 센다.from pyspark.sql.functions import first, last
retails_all.select(first("StockCode"), last("StockCode")).show()
first()
: 첫 값 반환last()
: 마지막 값 반환from pyspark.sql.functions import min, max
retails_all.select(min("Quantity"), max("Quantity")).show()
min()
: 최소 값max()
: 최대 값from pyspark.sql.functions import sumDistinct
retails_all.select(sumDistinct("Quantity")).show()
spark.sql("SELECT SUM(DISTINCT(Quantity)) FROM retailsALL").show()
sumDistinct()
: 중복값 빼고 다 더해버리기from pyspark.sql.functions import count, sum, avg, expr
retails_all.select(count("Quantity").alias("countQuantity"), sum("Quantity").alias("sumQuantity"), avg("Quantity").alias("avgQuantity"), expr("mean(Quantity)").alias("meanQuantity")).show()
avg()
: 평균을 구하는 함수sum()
: 값들을 더하는 함수expr()
: 표현식을 가능하게 하는 함수from pyspark.sql.functions import var_pop, stddev_pop, var_samp, stddev_samp
retails_all.select(var_pop("Quantity").alias("varpop"), stddev_pop("Quantity").alias("stddevpop"), var_samp("Quantity").alias("varsamp"), stddev_samp("Quantity").alias("stddevsamp")).show()
분산, 표준편차
var_pop : 모집단 분산(모분산)
stddev_pop : 모집단 표준편차(모표준편차)
var_samp : 표본 분산
stddev_samp : 표본 표준편차
from pyspark.sql.functions import corr, covar_pop, covar_samp
retails_all.select(corr("InvoiceNo", "Quantity").alias("corr"), covar_pop("InvoiceNo", "Quantity").alias("pop"), covar_samp("InvoiceNo", "Quantity").alias("samp")).show()
공분산, 상관관계
corr: 피어슨 상관관계 (DataFrame.corr과 같음)
covar_pop : 모집단 공분산
covar_samp : 표본집단 공분산
from pyspark.sql.functions import collect_set, collect_list, agg
retails_all.agg(collect_set("Country"), collect_list("Country")).show()
agg : aggregate
collect_set : 중복 X
collect_list : 중복 O
retails_all.groupBy("InvoiceNo","CustomerId").count().show()
spark.sql("SELECT InvoiceNo, CustomerId, COUNT(*) FROM retailsAll GROUP BY InvoiceNo, CustomerId").show()
groupBy()
: 그룹으로 묶어준다.retails_all.groupBy("InvoiceNo").agg(count("Quantity").alias("quan"), expr("count(Quantity)")).show()
from pyspark.sql.functions import to_date, col
date_df = retails_all.withColumn("date", to_date(col("InvoiceDate"), "yyyy-MM-dd HH:mm:ss"))
date_df.createOrReplaceTempView("date_df")
from pyspark.sql.window import Window
from pyspark.sql.functions import desc
window_function = Window.partitionBy("CustomerId", "date").orderBy(desc("Quantity")).rowsBetween(Window.unboundedPreceding, Window.currentRow)
max_quantity = max(col("Quantity")).over(window_function)
from pyspark.sql.functions import dense_rank, rank
win_dense_rank = dense_rank().over(window_function)
win_rank = rank().over(window_function)
date_df.where("CustomerId IS NOT NULL").orderBy("CustomerId").select(col("CustomerId"), col("date"), col("Quantity"), win_rank.alias("quantityRank"), win_dense_rank.alias("quantityDense"), max_quantity.alias("quantityMax")).show(5,False)
파일 및 폴더 생성
파일 시스템 탐색
도움말(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!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!