Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 아셈듀오 선정
- 키워드시각화
- 무신사 데이터분석
- 태블로 포트폴리오
- 데이터 포트폴리오
- 아셈듀오
- 태블로
- 데이터공모전
- tableau
- CRM
- 제네바기숙사
- MairaDB
- 교환학생
- 테이블계산
- 텍스트분석 시각화
- 두잇알고리즘코딩테스트
- 파이썬
- 아셈듀오 후기
- 리뷰분석
- HEG
- 교환학생 장학금
- 교환학생주거
- 제네바경영대학교
- 공모전후기
- 제네바주거
- 패스트캠퍼스 #자료구조 #코딩테스트 #배열
- 데이터 시각화 포트폴리오
- 제네바
- 데이터 분석 포트폴리오
- 미래에셋 공모전
Archives
- Today
- Total
민듀키티
프로그래머스 Python 코딩테스트 (LEVEL 1 - 6) 본문
🔴 문제 1 : 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMENT)
https://school.programmers.co.kr/learn/courses/30/lessons/72410
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 )
import re
def solution(new_id):
new_id = new_id.lower()
new_id = re.sub('[^a-z-_\.0-9]', '', new_id)
new_id = re.sub('[\.]+', '.', new_id)
new_id = re.sub('^\.', '', new_id)
new_id = re.sub('\.$', '', new_id)
if len(new_id) == 0 :
new_id=new_id.join("a")
if len(new_id) >= 16 :
new_id = new_id[0:15]
if len(new_id) <= 3 :
range_number = 3 - len(new_id)
new_id = new_id + (new_id[-1] * range_number )
new_id = re.sub('\.$', '', new_id)
return new_id
- 정규표현식을 활용하여 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외시킴
- 빈 문자열을 판단하는 방법은 "len(new_id) == 0" 로 판단함.
- 만약 문자열의 크기가 16을 넘어갈 경우에는 인덱싱 방식으로 [0:15]까지
- 만약 문자열의 크기가 3보다 작을 경우, 반복해야하는 횟수를 구해서, 마지막 문자값을 더해주기
- 문자열 제외를 하다가 마지막 값이 "." 가 있을 수 있기 때문에 다시 한 번 더 정규표현식을 활용하여 마지막 마침표 문자를 제외시킴
🔴 문제 2 : 체육복
https://school.programmers.co.kr/learn/courses/30/lessons/42862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 )
def solution(n, lost, reserve):
answer = 0
reserve_del = set(reserve)-set(lost)
lost_del = set(lost)-set(reserve)
for i in reserve_del:
if i-1 in lost_del:
lost_del.remove(i-1)
elif i+1 in lost_del:
lost_del.remove(i+1)
answer = n - len(lost_del)
return answer
- 이 문제의 함정은 "여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다." 라는 것임. 또한 "중복이 없다" 라는 점
- 따라서, 여벌 체육복이 있는 학생도 도난을 당했을 수도 있음
- 예를 들어 reserve = [1,2,3] 이고 lost = [3,4] 처럼
- 그렇기 때문에 "3" 이라는 값은 reserve에서 제거해줘야 함
- 또한 중복을 허락하지 않으니깐 set(집합) 으로 만들어줘서 처리
- reserve_del 을 하나씩 돌면서 reserve_del - 1 또는 reserve_del + 1 값이 lost_del 에 있다면, lost_del 리스트에 있는 해당 값을 remove 해줌
🔴 문제 3 : 실패율 (Kakao Blind Recruitment)
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 사실 이 문제는 파이참 리턴 값이랑, 프로그래머스 리턴값이랑 다르게 나온다,, 진짜 왜 다르게 나오는지 모르겠어서 ㅜㅜ
정답 )
def solution(N, stages):
# 스테이지 클리어하지 못한 리스트 / not_clear = []
# 스테이지에 도달한 플레이어 수 리스트 / total_player = []
not_clear = []
total_player = []
answer_list = []
for i in range(1,N+1) :
count = 0
total_count = 0
for k in stages :
if i == k :
count += 1
if k >= i :
total_count += 1
not_clear.append(count)
total_player.append(total_count)
for i in range (len(not_clear)) :
answer_list.append(not_clear[i] / total_player[i])
sorted_list= []
for i in range (len(answer_list)) :
sorted_list.append(answer_list.index(max(answer_list))+1)
answer_list[answer_list.index(max(answer_list))] = -1
return sorted_list
- 단계별 스테이지 클리어하지 못한 리스트를 not_clear 리스트에, 단계별 스테이지에 도달한 플레이어 수 리스트를 total_player 리스트에 저장
- not_clear 리스트
- 1단계에 멈춰있는 사람이 있다 ? 그럼 stages 리스트에서 단순히 1값만 카운트 해주면 됨
- 2단계에 멈춰있는 사람이 있다 ? 그럼 stages 리스트에서 단순히 2값만 카운트 해주면 됨
- total_player 리스트
- 5단계에 멈춰있는 사람이 있다 ? 그럼 1,2,3,4 단계는 통과했다는 뜻
- 4단계에 멈춰있는 사람이 있다 ? 그럼 1,2,3 단계는 통과했다는 뜻
- answer_list [i] = not_clear[i] / total_player[i] 로 실패율을 계산해줌
- 그리고 index를 활용하여 list 값을 뽑아줌
'Coding Test' 카테고리의 다른 글
알고리즘 코딩테스트 (깊이우선탐색) (1) | 2023.03.20 |
---|---|
알고리즘 코딩테스트 - 정렬(버블, 선택, 삽입) (0) | 2023.03.10 |
알고리즘 코딩테스트 - 자료구조(스택과 큐) (0) | 2023.03.10 |
알고리즘 코딩테스트 - 자료구조 (투포인터, 슬라이딩 윈도우) (0) | 2023.03.06 |
알고리즘 코딩테스트 - 자료구조 (배열, 리스트, 구간합) (1) | 2023.03.03 |