[프로그래머스][PYTHON] Lv. 1 [PCCE 기출문제] 10번 / 데이터 분석

2024. 1. 26. 19:36· 코딩테스트/PYTHON
목차
  1. 내 코드
  2. 다른 사람 풀이
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

내 코드


      
def solution(data, ext, val_ext, sort_by):
answer = []
for d in data:
if ext == "code":
if d[0] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
elif ext == "date":
if d[1] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
elif ext == "maximum":
if d[2] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
else:
if d[3] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
if sort_by == "code":
answer = sorted(answer, key=lambda x:x[0])
elif sort_by == "date":
answer = sorted(answer, key=lambda x:x[1])
elif sort_by == "maximum":
answer = sorted(answer, key=lambda x:x[2])
else:
answer = sorted(answer, key=lambda x:x[3])
return answer

 

 풀면서도 마음에 들지 않는 코드였다. 

딕셔너리로 풀어야하는 것은 알고 있었는데, 어떻게 적용해야할지 감이 안왔다ㅠㅠ

그래도 접근 방식은 떠올릴 수 있으니 다행인 것인가,,

연습이 많이 필요한듯하다. 

 

다른 사람 풀이


      
def solution(datas, ext, val_ext, sort_by):
answer = []
dic = {
"code" : 0,
"date" : 1,
"maximum" : 2,
"remain" : 3
}
order = dic[ext]
sortIdx = dic[sort_by]
for data in datas:
if data[order] < val_ext:
answer.append(data)
answer.sort(key = lambda x:x[sortIdx])
return answer

 

다른 사람이 푼 풀이를 보면,,

먼저 데이터 인덱스에 맞는 딕셔너리를 하나 만든다. 

문제에서 제공해주는 값에 맞는 인덱스를 뽑아내기 위해..

어떤 정보를 기준으로 데이터를 뽑아낼지(ext)를 order로 지정하고

정보를 정렬할 기준의 인덱스를 sortIdx로 지정한다. 

 

이제 데이터 배열을 순회하며, 뽑아낼 데이터를 선택하고, 

정렬할 기준(sortIdx)에 맞춰 데이터를 정렬한다!

 

2차원 배열 정렬하기

파이썬 sort() 내장함수로 1차원 배열을 쉽게 정렬할 수 있다. 


      
arr = [2,3,4,5,1]
arr.sort()
# 오름차순
arr.sort(reverse = True)
# 내림차순

 

2차원 배열의 정렬은 기준을 명시해주는 것이 필요한데


      
# 기준 명시X (-> arr[i]를 기준으로 오름차순 정렬)
arr = [[2,3],[1,2],[0,4]]
arr.sort()
print(arr)
# [[0, 4], [1, 2], [2, 3]]

 

기준을 명시한다면


      
arr = [[2,3],[1,2],[0,4]]
arr.sort(key=lambda x:x[0])
print(arr)
# [[0, 4], [1, 2], [2, 3]]
# 이 때, x값에 -를 취하면 내리림차순 정렬 가능
# arr.sort(key=lambda x: -x[0])

 

만약, 다중 조건을 명시하고 싶다면


      
arr = [[2, 3], [1, 2], [0, 4], [2, 2]]
arr.sort(key=lambda x: (x[1], x[0]))
print(arr)
# [[1, 2], [2, 2], [2, 3], [0, 4]]

 

로 할 수 있다!

 

 

끄읏-!

728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > PYTHON' 카테고리의 다른 글

[프로그래머스][PYTHON] Lv. 0 배열 만들기 1  (0) 2024.01.30
[프로그래머스][PYTHON] Lv. 1 달리기 경주  (1) 2024.01.30
[프로그래머스][PYTHON] Lv. 1 최소직사각형  (1) 2024.01.26
[프로그래머스][PYTHON] Lv. 0 세로 읽기  (0) 2024.01.23
[프로그래머스][PYTHON] Lv. 0 문자열 여러 번 뒤집기  (1) 2023.12.29
  1. 내 코드
  2. 다른 사람 풀이
'코딩테스트/PYTHON' 카테고리의 다른 글
  • [프로그래머스][PYTHON] Lv. 0 배열 만들기 1
  • [프로그래머스][PYTHON] Lv. 1 달리기 경주
  • [프로그래머스][PYTHON] Lv. 1 최소직사각형
  • [프로그래머스][PYTHON] Lv. 0 세로 읽기
_알파카
_알파카
안녕하세요, 데이터 분석가를 꿈꾸는 개인기록 블로그입니다:)
250x250
_알파카
yeonnys' 개발일지
_알파카
전체
오늘
어제
  • 분류 전체보기 (249)
    • PYTHON (16)
    • MYSQL (6)
    • 코딩테스트 (127)
      • PYTHON (88)
      • SQL (35)
      • AL (4)
    • STUDY (45)
      • 데이터 분석 (1)
      • DevCourse (44)
      • BOOST CLASS (0)
    • 데이터 시각화 (7)
      • Redash (3)
      • Tableau (1)
      • Superset (2)
    • 데이터 웨어하우스 (5)
      • Snowflake (3)
      • Redshift (0)
    • STATISTICS (1)
    • GIT (5)
    • AWS (4)
    • AI (1)
    • EXCEL (1)
    • 프로젝트 (5)
    • 기타 (16)
    • 일기 (10)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기
  • 설정

공지사항

인기 글

태그

  • S3
  • 백준
  • 딕셔너리
  • 프로그래머스
  • 파이썬
  • 코딩테스트
  • redash
  • mysql
  • AWS
  • python

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
_알파카
[프로그래머스][PYTHON] Lv. 1 [PCCE 기출문제] 10번 / 데이터 분석
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.