67일차

Suhyeon Lee·2025년 1월 6일
post-thumbnail

CodeKata

SQL

프로그래머스: 부서별 평균 연봉 조회하기

  • 작성한 쿼리
SELECT
  hd.dept_id
  , hd.dept_name_en
  , ROUND(AVG(sal), 0) AS AVG_SAL
FROM
  hr_department hd
  JOIN hr_employees he
  USING (dept_id)
GROUP BY
  hd.dept_id
  , hd.dept_name_en
ORDER BY
  AVG_SAL DESC
;

프로그래머스: 노선별 평균 역 사이 거리 조회하기

  • 처음 작성한 쿼리
    • 테스트에서는 맞는데 제출에서는 틀렸음
SELECT
  route
  , CONCAT(ROUND(SUM(d_between_dist), 1), 'km') AS total_distance
  , CONCAT(ROUND(AVG(d_between_dist), 2), 'km') AS average_distance
FROM
  subway_distance
GROUP BY
  route
ORDER BY
  total_distance DESC
;

→ 왜 제출에서는 틀렸다고 했을까? ROUND한 값이 동점이었을 때 순서가 안 맞나 보다!

  • 다시 작성한 쿼리
    • 통과!
      • 프로그래머스 '질문하기' 낙방여우님 팁: 정렬을 숫자 기준으로 해 주세요.
SELECT
  route
  , CONCAT(ROUND(SUM(d_between_dist), 1), 'km') AS total_distance
  , CONCAT(ROUND(AVG(d_between_dist), 2), 'km') AS average_distance
FROM
  subway_distance
GROUP BY
  route
ORDER BY
  SUM(d_between_dist) DESC
;

Python

75. 최댓값과 최솟값

  • 작성한 코드
def solution(s):
    s_list = list(map(int, s.split(' ')))
    answer = f'{min(s_list)} {max(s_list)}'
    return answer

참고할 만한 다른 풀이

def solution(s):
    s = list(map(int,s.split()))
    return str(min(s)) + " " + str(max(s))
  1. C언어식 풀이
def solution(s):
    t = []
    if s[0] != "-":
        s = "+" + s
    for i in range(0, len(s)):
        t += [s[i]]
    for i in range(0, len(t)):
        if t[i] == " " and t[i+1] != "-":
            t.insert(i+1, "+")
    for i in range(1, len(t)):
        if t[len(t)-i] == " " and t[len(t)+1-i] != "-":
            t.insert(len(t)+1-i, "+")
            break
    print(t)
    result = []
    midcount1 = ""
    midcount2 = ""
    for i in range(len(t)):

        if t[i] == "-": 
            for j in range(i+1, len(t)):
                if t[j] != " ":
                    midcount1 = midcount1 + t[j]
                    if j == len(t)-1:
                        result += [-int(midcount1)]
                        midcount1 = ""
                        break
                elif t[j] == " ":
                    print(midcount1)
                    result += [-int(midcount1)]
                    midcount1 = ""
                    break

        elif t[i] == "+":
            for j in range(i+1, len(t)):
                if t[j] != " ":
                    midcount2 = midcount2 + t[j]
                    if j == len(t)-1:
                        result += [int(midcount2)]
                        midcount2 = ""
                        break
                elif t[j] == " ":
                    print(midcount2)
                    result += [int(midcount2)]
                    midcount2 = ""
                    break


    print(result)
    resultmax = int(result[0])
    resultmin = int(result[0])
    for i in range(len(result)):
        if resultmax < result[i]:
            resultmax = result[i]
    for i in range(len(result)):
        if resultmin > result[i]:
            resultmin = result[i]
    return "%s %s" % (resultmin, resultmax)
  1. List Comprehension & sort/sorted
# 1
def solution(s):
    s_list=s.split(" ")
    n = [int(i) for i in s_list]
    n.sort()

    return str(n[0]) + " " + str(n[len(n)-1])

# 2
def solution(s):
    il = sorted([int(c) for c in s.split(' ')])
    answer = ' '.join([str(il[0]), str(il[len(il)-1])])
    return answer

# 3
def solution(s):
    answer = sorted([int(x) for x in s.split()])
    return str(answer[0]) + " " + str(answer[-1])
  1. lambda
def solution(s):
    return map(lambda x: str(min(x))+" "+str(max(x)), [list(map(int,s.split(" ")))]).__next__()

76. JadenCase 문자열 만들기

  • 작성한 코드
def solution(s):
    answer = ''
    s_split = s.split(' ')
    
    for i in range(len(s_split)):
        s_split[i] = s_split[i].capitalize()

    answer = ' '.join(s_split)
    return answer
def solution(s):
    import string
    return string.capwords(s, ' ')

참고할 만한 다른 풀이

def solution(s):
    answer = ''
    for i in s.lower().split(' '):
        if answer == '':
            answer += i.capitalize()
        else:
            answer += ' '+i.capitalize()
    return answer

취업 지원 설명회

5분 기록 보드 템플릿을 소개합니다!

최종 프로젝트 준비

라이브러리 공부

포스트맨(Postman) 사용법

1
2

  • 포스트맨을 이용하여 API를 실행하고 테스트하는 방법

    • API에 요청을 보내고 결과를 확인하고 싶을 때 브라우저에 직접 API URL을 작성하여 결과 확인 가능
      • 하지만 이런 방법으로는 GET 방식 요청을 보내거나 하는 등의 간단한 요청에 한해서만 가능
    • 포스트맨을 이용한다면 대상 URL에 요청할 메서드를 지정할 수 있고, 호출에 필요한 파라미터의 전달 방식을 설정할 수 있으며, 결과 또한 빠르게 확인 가능
  • 자신의 계정 로그인 후 Workspaces > My Workspace로 들어가서 원하는 작업 진행

    • 공유받은 json 파일이 있다면 import해서 사용
    • 새로 작성한다면 New > Collections를 선택해서 파일을 만들고 New request를 만들어서 원하는 작업을 새로 만들어 진행
    • 테스트용 API
      (홈페이지: https://httpbin.org/)
      • 간단하게 HTTP request와 response의 동작을 확인할 수 있도록 서비스를 제공함
요청방식URL
GEThttps://httpbin.org/get
POSThttps://httpbin.org/post
PUThttps://httpbin.org/put
DELETEhttps://httpbin.org/delete

포스트맨 실행, 화면 구성 확인

  • 빈 collection 추가
  • request 추가
  • API 실행
  1. 메소드 변경
  2. URL 입력
  3. Send 클릭

파라미터 추가하기

  • 웹페이지에서 파라미터를 넘긴다고 생각하면 GET 방식일 때 URL에 붙이고, POST 방식일 때 form에 싸서 submit을 하는데 이를 포스트맨에서는 다음과 같이 설정함
  1. URL에 추가
    (주로 GET 방식)
    • Param 탭에서 Key와 Value 세트를 작성하여 Send를 클릭

  1. Requestbody에 추가하여 넘기기
    (주로 POST, PUT 등의 방식)
  • Body 탭을 이용
  • API 사양이 어떻게 정의되어 있냐에 따라 어떤 형식을 이용해야 할지 결정

  • body 종류

    • form-data
      • form 태그의 정보를 submit으로 넘길 때
      • key-value 조합으로 작성
      • 파일 전송 가능
    • x-www-form-unlencoded:
      • form-data 형식과 같으나 영문자를 제외한 글자는 모두 인코딩
      • key-value 조합으로 작성
      • 텍스트 타입 전송만 가능(파일 전송 불가)
    • raw:
      • 파라미터 형식과 내용을 직접 작성하는 경우
      • Text, JavaScript, JSON, HTML, XML 옵션 선택 가능
        ※ Spring Boot로 구축한 REST API의 컨트롤러에서 @Requestbody 어노테이션을 통해 파라미터를 받는 메서드라면 JSON 선택하여 작성
    • binary:
      • 파일 전송할 때 사용
  • 변수를 환경에 지정해 사용 가능

    • 우측 상단 'Environment edit'을 통해 변수를 설정하고 입력할 수 있음
      • 반복적으로 사용하는 파라미터나 변화가 있는 유동적인 경우 한 번만 수정하면 되서 편함
      • initial value와 current value는 처음에 둘 다 같은 값 넣어주기

이터널 리턴 분석

  • Github

  • 이터널 리턴 개발자 디스코드

    • 프로젝트 관련 참고할 만한 내용 정리





회고

  • 내일부터 최종 프로젝트 시작이다. 막막하지만 하다 보면 어떻게든 되겠지
profile
2 B R 0 2 B

0개의 댓글