[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!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!