KATA#29

codataffee·2024년 5월 10일
0

CODEKATA

목록 보기
29/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


✔️ 문제 #1: Project Employees I

✔️ 제출 쿼리

✔️ 쿼리 분석

# Project 테이블 기준으로 조인 후 Project_id를 기준으로 그룹화,
  Project 테이블의 Project_id 기준 Employee 테이블의 experience_years 의 평균 구하기
  조인하는 과정에서 null값이 생겨났으므로 COALESCE 함수로 null값을 0으로 바꿔주고,
  ROUND 함수로 소수점 2번째 자리까지만 반올림하여 반환
  
SELECT p.project_id,
       ROUND(COALESCE(AVG(e.experience_years),0),2) average_years
FROM Project p LEFT JOIN Employee e
     ON p.employee_id = e.employee_id
GROUP BY p.project_id


✔️ 문제 #2: Percentage of Users Attended a Contest

✔️ 제출 쿼리

✔️ 쿼리 분석

# 유저들의 수를 편하게 불러오기 위해 tu라는 CTE 생성
Register 테이블과 tu 테이블을 크로스 조인 후
contest_id 기준으로 그룹화하여 등록한 유저들의 수를 총 유저 수로 나눈 뒤 
100을 곱하여 비율(%) 구하기

WITH tu AS (
    SELECT COUNT(*) cnt
    FROM Users
            )

SELECT contest_id, 
       ROUND((COUNT(user_id)/tu.cnt*100),2) percentage
FROM 
    Register r, tu
GROUP BY  contest_id
ORDER BY percentage DESC, contest_id


- PYTHON


✔️ 문제 #1: 숫자 문자열과 영단어

✔️ 제출 코드

✔️ 코드 분석

# 문자열의 숫자와 영문자를 구분하기 위해 sd 라는 딕셔너리에 키:값 부여
# for문의 in에  .items() 함수를 사용해 
  숫자와 영문자를 키:값으로 num 과 eng 에 반복 부여
# s 문자열 안에 딕셔너리 값에 해당하는 eng가 있으면 num으로 대체
# 문자열 s 를 int(s)하여 정수형으로 변환 후 반환

def solution(s):
    sd = {
        '0' : 'zero',
        '1' : 'one',
        '2' : 'two',
        '3' : 'three',
        '4' : 'four',
        '5' : 'five',
        '6' : 'six',
        '7' : 'seven',
        '8' : 'eight',
        '9' : 'nine',
    }
    for num, eng in sd.items():
        if eng in s:
            s = s.replace(eng, num)
    return int(s)


✔️ 문제 #2: 문자열 내 마음대로 정렬하기

✔️ 제출 코드

✔️ 코드 분석

# 방법을 도저히 모르겠어서 다른 사람들의 풀이 참고..
# lambda 함수를 sorted() 함수와 함께 사용하면 원하는 여러 조건으로 키 정렬이 가능하다.
# 문자열 x를 n번째 인덱스 글자를 기준으로 정렬하되, 같은 글자인 경우 문자열 x순으로 정렬

def solution(strings, n):
    answer = sorted(strings, key=lambda x:(x[n],x))
    return answer


✔️ CHECK POINT


profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보