일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 캐글
- 혼공학습단
- 포스코 아카데미
- 삼성 SDS
- 팀 분석
- 혼공머신러닝딥러닝
- Brigthics Studio
- 직원 이직률
- 삼성SDS
- 영상제작기
- 브라이틱스
- 삼성 SDS Brigthics
- Brightics
- Brigthics를 이용한 분석
- 포스코 청년
- 추천시스템
- 데이터분석
- 개인 의료비 예측
- Brightics Studio
- 모델링
- 삼성SDS Brightics
- Brightics를 이용한 분석
- 혼공
- 직원 이직여부
- 노코드AI
- 데이터 분석
- Brigthics
- 삼성SDS Brigthics
- 브라이틱스 서포터즈
- 혼공머신
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level 1_크레인 인형뽑기 게임 본문
문제 유형
2019 카카오 개발자 겨울 인턴십
문제
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 문제 풀이
- moves를 인덱스로 수정하여 문풀 시작
- 인형 뽑고 0으로 만들기, 배열에 인형 담기
- 인형 담은 배열에서 앞 숫자와 비교 -> 같으면 삭제
(고려해야할 점 : 연속된 숫자 삭제되고 난 후에도 삭제된 이후에 연속된 숫자 있는지 확인!)
def solution(board, moves):
answer = 0
moves_index = [i - 1 for i in moves] # moves 인덱스로 수정
ans = [] # 인형 담아두는 배열
for m in moves_index:
for i in range(len(board)):
# 인형 뽑고 0만들기, 배열에 인형 담기
if board[i][m] != 0:
ans.append(board[i][m])
board[i][m] = 0
break
# 인형 담은 배열에서 앞 숫자랑 비교 - 같으면 삭제
if len(ans) > 1:
if ans[-1] == ans[-2]:
answer += 2
del ans[-2:]
return answer
다른 사람들의 문제풀이
1) filter, zip, extend 이용
- filter(적용시킬 함수, 적용할 요소들) : 필요한 부분만 필터링해서 사용
2) map, filter
앞서 배운 제너레이터(`generator`)는 이터레이터(`iterator`) 입니다. 다만 제너레이터 표현식 또는 `yield`키워드를 통해 생성한 이터레이터는 구분을 ...
wikidocs.net
- zip : 여러개의 리스트 set으로 묶기
https://codingpractices.tistory.com/50
[Python] 파이썬 zip() 매서드 사용법
Python .zip() 매서드 매서드 풀이 zip() - 동일 개수로 이루어진 자료형을 묶어 주는 함수 zip -> zipper 지퍼처럼 각각 리스트에 있는 요소를 담아 지퍼로 잠가 보관하는 느낌 같다! 반환값 : 두 개 이
codingpractices.tistory.com
- extend : [ ] 한 껍질 벗겨서 값에 넣기
https://m.blog.naver.com/wideeyed/221541104629
[Python] list append()와 extend() 차이점
Python 리스트에 새로운 원소를 추가하는 방법에는 append(x)와 extend(iterable)가 있고 두 함수의 차이...
blog.naver.com
- := 연산자 : 변수 할당을 줄여준다(Python 3.8부터 사용 가능)
https://int-i.github.io/python/2020-05-29/python-walrus-operator/
Python 3.8 기여운 바다코끼리를 드리겟슴미다 := - 인하대학교 인트아이
파이썬 문법을 읽다, ‘바다코끼리 연산자’라고 불리는 기능을 발견했다. 찾아보니 2019년 10월에 정식 릴리즈된 파이썬 3.8에서 들어왔다고 하는데, 찾아보느라 이것저것 ...
int-i.github.io
def solution(board, moves):
cols = list(map(lambda x: list(filter(lambda y: y > 0, x)), zip(*board)))
a, s = 0, [0]
for m in moves:
if len(cols[m - 1]) > 0:
# 꺼낼 인형 값, 이미 꺼낸 인형 같은지 비교
if (d := cols[m - 1].pop(0)) == (l := s.pop()):
a += 2
else:
s.extend([l, d])
return a
2) box 비어있을 때 False, if문은 True여야 실행
- if box에 값이 있을 때, 뽑은 인형과 전 인형 비교
def solution(board, moves):
box = []
answer = 0
for x in moves:
for y in range(len(board)):
if board[y][x-1]:
if box and board[y][x-1] == box[-1]:
answer += 2
box.pop()
board[y][x - 1] = 0
break
else:
box.append(board[y][x-1])
board[y][x - 1] = 0
break
return answer
3) numpy 사용
- numpy 이용해서 Transpose (인덱스 하나로 쉽게 접근하기 위해)
- 해당 행 인덱스, 값 출력하여 비교!
def solution(board, moves):
board = np.array(board).transpose() # 인덱스 접근 편하게하기 위해 transpose()
answer = [-1]
count = 0
for move in moves:
for i, num in enumerate(board[move-1]): # 해당 행 인덱스, 값 출력
if num == 0:
continue
else:
board[move-1][i] = 0
if num == answer[-1]:
answer.pop()
count += 2
break
answer.append(num)
break
return count
import numpy as np
리뷰
- numpy transpose 사용하여 인덱스 쉽게 접근
- 무엇이든 비어있으면 False, 안에 값이 있으면 True
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스] Level 1_없는 숫자 더하기 (0) | 2022.07.09 |
---|---|
[프로그래머스] Level 1_이상한 문자 만들기 (0) | 2022.07.09 |
[프로그래머스] Level 1_키패드 누르기 (0) | 2022.07.04 |
[프로그래머스] Level 1_신규 아이디 추천 (0) | 2022.07.04 |
[프로그래머스] Level 1_로또의 최고 순위와 최저 순위 (0) | 2022.06.16 |