내일배움캠프 5기 합류 전 기본적인 강의를 들어야 한다고 한다.
웹개발을 위한 기본적인 강의 (HTML, CSS, JavaScript)
진도
- vscode 설치 (Live Server 설치)
- 수강진도: 1-4강 HTML, CSS 기본 내용
감상
HTML 맛만 봤다
웹개발을 위한 기본적인 강의 (SQL)
진도
- DBeaver 설치
- 기본적인 SQL Query문 작성(SELECT, FROM, WHERE, LIKE 절)
- 기본적인 SQL Query문 함수 작성(DISTINCT, COUNT)
- DISTINCT : 필드 내 unique한 value들을 찾고 싶을 때 사용 (파이썬의 set())
- COUNT : 필드 내 value개수 카운트
감상
SQL은 사람마다 기업마다 코딩 스타일이 달라서 구문 자체에 익숙해져야겠다.
파이썬 문제 풀어보기
개요: H 높이와 W너비인 호텔이 있고, 손님들은 왼쪽에 있는 엘리베이터에서 남아있는 방 중에 가장 가까운 방을 선호할 때 임의의 손님 방을 배정하는 방법을 구하는 문제
풀이 구상: 선호도에 따라 호텔 왼쪽부터 채워 나갈 것이므로 손님 번호수 N을 H로 나눈 몫과 나머지를 이용해 호수를 구하는 방법
import sys
T = int(input())
for i in range(T):
H, W, N = map(int, sys.stdin.readline().split())
print(str(N % H) + str((N // H + 1)).zfill(2))
T
를 input()
으로 입력받고 int()
로 감싸 정수형으로 변환한다.T
만큼 반복시킨다.H
, W
와 몇번째 손님인지를 나타내는 N
을 map(int,~)
를 이용해 정수형으로 각각 입력 받는다.(N % H)
로 층 계산, (N // H + 1).zfill(2)
로 너비 방향 호수 계산.문제점
반례: H, W, N = 6, 10, 6일 경우 실제 배정 호수는 601호지만 위 코드에서는 002가 산출
제일 위층을 계산할 때 나머지가 0이 되어버리므로 if문
으로 구분을 지어주기로 했다.
import sys
T = int(input())
for i in range(T):
H, W, N = map(int, sys.stdin.readline().split())
if N % H == 0:
print(str(H) + str(N // H).zfill(2))
else:
print(str(N % H) + str(N // H + 1).zfill(2))
N // H + 1
로 계산해주었다. (1은 호수 OO1호부터 시작되므로 +1)개요: 조건이 주어졌을 때 특정 아파트 호수에 몇명이 살고 있는지 구하는 문제
초기 구상: 그림판으로 그려봤을 때 등차수열이며 어떠한 규칙이 있을 걸로 생각했으나 잠시 고민하다가 재귀함수로 풀기로 했다.
def apartment_citizen(k, n):
"""층 k과 호수 n이 주어졌을 때 해당 호수에 몇명이 살고 있는지 리턴하는 함수"""
# base case
if n == 0: # xx1호일 경우 무조건 1명
return 1
elif k == 0: # 0층일 경우 조건에 따라 n + 1명이 삼
return n + 1
# recursive case
return apartment_citizen(k - 1, n) + apartment_citizen(k, n - 1) #
T = int(input())
apartment = []
for i in range(T):
k = int(input())
n = int(input())
print(apartment_citizen(k, n - 1))
문제점
시간 초과: 아무래도 위의 재귀함수 풀이는 낮은 값에서는 정답을 리턴하지만 O(n^2)의 복잡도를 가지고 있기 때문에 값이 커질수록 비효율적이다. 실제로 k, n에 20을 넣고 돌렸을 때 팬이 풀로 돌아가서 터미널을 kill했다. 결국 다른 접근 방법이 필요하다.