[코딩 공부] 1일차(2/13)

성철민·2023년 2월 13일
0

배움

목록 보기
1/42
post-thumbnail

Schedule1. 스파르타코딩클럽

내일배움캠프 5기 합류 전 기본적인 강의를 들어야 한다고 한다.

강의: [왕초보] 비개발자를 위한, 웹개발 종합반

웹개발을 위한 기본적인 강의 (HTML, CSS, JavaScript)

진도

  • vscode 설치 (Live Server 설치)
  • 수강진도: 1-4강 HTML, CSS 기본 내용

감상
HTML 맛만 봤다


강의: [왕초보] 엑셀보다 쉬운, SQL

웹개발을 위한 기본적인 강의 (SQL)

진도

  • DBeaver 설치
  • 기본적인 SQL Query문 작성(SELECT, FROM, WHERE, LIKE 절)
  • 기본적인 SQL Query문 함수 작성(DISTINCT, COUNT)
    - DISTINCT : 필드 내 unique한 value들을 찾고 싶을 때 사용 (파이썬의 set())
    - COUNT : 필드 내 value개수 카운트

감상
SQL은 사람마다 기업마다 코딩 스타일이 달라서 구문 자체에 익숙해져야겠다.


Schedule2. BAEKJOON

파이썬 문제 풀어보기

단계별로 풀어보기('7단계. 기본수학 1' 도전중)

10250번. ACM호텔

개요: 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))
  • 테스트 데이터 수 Tinput()으로 입력받고 int()로 감싸 정수형으로 변환한다.
  • for문으로 테스트를 T만큼 반복시킨다.
  • 호텔 높이와 너비에 대한 정보 H, W와 몇번째 손님인지를 나타내는 Nmap(int,~)를 이용해 정수형으로 각각 입력 받는다.
  • print()문은 호수를 나타내기 위해 문자열 앞뒤를 구분해서 산출하려고 했다. (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가 0이 될 때 이 손님은 제일 위층 객실을 배정해야 하는 것을 if문으로 구분
  • N % H가 0이 아닐 경우에는 나머지 층들이며 왼쪽 객실이 모두 가득 차야 다음 객실로 넘어가므로 N // H + 1로 계산해주었다. (1은 호수 OO1호부터 시작되므로 +1)

2775번. 부녀회장이 될테야

개요: 조건이 주어졌을 때 특정 아파트 호수에 몇명이 살고 있는지 구하는 문제

초기 구상: 그림판으로 그려봤을 때 등차수열이며 어떠한 규칙이 있을 걸로 생각했으나 잠시 고민하다가 재귀함수로 풀기로 했다.

초기 풀이

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했다. 결국 다른 접근 방법이 필요하다.

정답

profile
developer

0개의 댓글