1. 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 | 프로그래머스 스쿨 (programmers.co.kr)
2. 코딩테스트 연습 - 체육복 | 프로그래머스 스쿨 (programmers.co.kr)
코드
.
모범 답안
def solution(n, lost, reserve):
# 정렬
lost.sort()
reserve.sort()
# lost, reserve에 공통으로 있는 요소 제거
for i in reserve[:]:
if i in lost:
reserve.remove(i)
lost.remove(i)
# 체육복 빌려주기(나의 앞 번호부터 확인)
for i in reserve:
if i-1 in lost:
lost.remove(i-1)
elif i+1 in lost:
lost.remove(i+1)
return n-len(lost)
lost, reserve를 오름차순 정렬한다. → lost = [2, 4], reserver = [3, 1] 일 때 1번이 2번에게, 3번이 4번에게 체육복을 빌려주면 모두가 수업을 들을 수 있지만 정렬하지 않으면 3번이 2번에게 체육복을 빌려주게 되어 원하는 결과값을 얻을 수 없다.
실패 원인
유사하게 접근하였으나 첫 번째 for 문에서 [:]를 사용X → remove로 값을 제거해도 reserve 값 자체에 변화가 없음
def solution(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve:
f = r - 1
b = r + 1
if f in _lost:
_lost.remove(f)
elif b in _lost:
_lost.remove(b)
return n - len(_lost)
3. 코딩테스트 연습 - 대충 만든 자판 | 프로그래머스 스쿨 (programmers.co.kr)
코드
.
모범 답안
def solution(keymaps,targets):
data=dict()
keylist=[]
ans=[]
for key in keymaps:
for k in key: # keymap 원소 최솟값 찾아 data에 삽입하는 과정
if k not in keylist:
data[k]=key.index(k)+1
keylist.append(k)
else:
if key.index(k)+1<data[k]:
data[k]=key.index(k)+1
for target in targets: #targets의 원소를 돌며 키 누르는 수 세기
tmp=0
for t in target:
if t not in keylist:
tmp=-1
break
else:
tmp+=data[t]
ans.append(tmp)
return ans
keymap 원소들의 최솟값을 찾아 정리하여 값을 찾고 싶었는데, 원소와 그 최솟값을 한 번에 정리하여 접근하는 데에 어려움이 있었다. dict()를 잘 활용하자
'코딩테스트 > programmers (python)' 카테고리의 다른 글
20240124/ programmers/ 1단계/ python (0) | 2024.01.24 |
---|---|
20240123/ programmers/ 1단계/ python (1) | 2024.01.23 |
20240119/ programmers/ 1단계/ python (0) | 2024.01.19 |
20240118/ programmers/ 1단계/ python (0) | 2024.01.19 |
20240117/ programmers/ 1단계/ python (0) | 2024.01.17 |