일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 코딩테스트
- 추천시스템
- SGD
- TF-IDF
- 데이터
- 딥러닝
- wordcloud
- 알고리즘
- 코테
- selenium
- 데이터 엔지니어링
- 파이썬
- pytorch
- 백준
- 협업 필터링
- Cosine-similarity
- codingtest
- Python
- Overfitting
- Tensor
- 분산 시스템
- recommendation system
- 머신러닝
- 부스트캠프
- coursera
- 웹크롤링
- 시각화
- 프로그래머스
- 웹스크래핑
- 추천 시스템
- Today
- Total
개발자식
[프로그래머스] 실전 모의고사 (1) 본문
1번 문제
문제설명
입력으로 정수로 이루어진 X, Y를 받습니다. (타입은 String) ex: X = "100", Y = "2345"
X 와 Y 각 인덱스 마다 같은 숫자를 짝을 짓습니다.
짝이 지어지는 숫자들로 만들 수 있는 가장 큰 수를 리턴합니다.
X, Y의 짝궁이 하나도 존재하지 않으면 "-1"을 리턴합니다.
또한 짝궁이 0으로만 구성 되어있다면 "0"을 리턴합니다.
제한사항
- 3 ≤ X, Y 의 길이(자릿수) ≤ 3,000,000 입니다.
- X, Y 는 0으로 시작하지 않습니다.
- X, Y 의 짝꿍은 상당히 큰 정수일 수 있으므로 문자열(String)로 반환
입출력 예
X | Y | result |
"100" | "2345" | "-1" |
"100" | "203045" | "0" |
"100" | "123450" | "10" |
"12321" | "42531" | "321" |
"5525" | "1255" | "552" |
나의 풀이
from collections import Counter
def solution(X, Y):
answer = []
dic = Counter(X) & Counter(Y)
if dic == {}:
return "-1"
arr = sorted(dic.items())
if arr[0][0] == '0' and len(arr) == 1:
return "0"
for i in arr:
answer.append(i[0]*i[1])
return ''.join(reversed(answer))
2번 문제
문제설명
XYZ마트는 10일동안 회원자격을 부여합니다.
회원을 대상으로는 매일 한 가지 제품을 할인하는 행사를 합니다.
할인하는 제품은 하루에 하나만 구매할 수 있습니다.
자신이 원하는 제품과 수량이 할인하는 날짜와 10일연속으로 일치할 경우에 맞춰서 회원가입을 하려고합니다.
회원 등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하시오 (가능한 날이 없다면 0 return)
제한사항
- 1 ≤ want의 길이 = number의 길이 ≤ 10
- 1 ≤ number의 원소 ≤ 10
- number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10
- 10 ≤ discount의 길이 ≤ 10
- want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열
- 1 ≤ want의 원소의 길이, discount의 원소의 길이 ≤ 12
나의 풀이
from collections import Counter
def solution(want, number, discount):
answer = 0
arr = []
for i in range(len(want)):
arr.extend([want[i]] * number[i])
dic = Counter(arr)
for i in range(len(discount)-10+1):
c = Counter(discount[i:i+10])
if dic - c == Counter():
answer+=1
return answer
3번 문제
문제설명
택배상자에 트럭을 실어야 하는데, 택배 상자는 1번 상자부터 n번 상자까지 번호가 증가하는 순서대로 컨테이너 벨트에 놓여 전달된다. 순서대로 상자를 내릴 수 있는데 트럭에 실어야 하는 순서(order)에 맞춰 상자를 실어야 한다.
현재 트럭에 실어야 하는 순서가 아니라면 보조 컨테이너를 이용하여 잠시 보관할 수 있다.
[1,2,3,4,5] 순의 택배물이 있다고 가정합니다.
order에는 실어야하는 택배물의 순서가 들어있습니다.
예로 [4,3,1,2,5] 이라고 한다면, 4번이 제일 먼저 실어야하기 때문에 1,2,3번을 컨테이너 벨트에 올립니다.
[4,5]가 남은 상황에서 4번을 빼내고 다음 순서인 3번을 컨테이너 벨트에서 가져와 트럭에 넣습니다.
그 다음순서는 1번인데 1번은 2번뒤에 있기때문에 빼낼 수 없습니다.
따라서 트럭에 넣는 택배물은 4,3번 두개뿐이라서 2를 리턴합니다.
제한사항
- 1 ≤ order의 길이 ≤ 1,000,000
- order는 1이상 order의 길이 이하의 모든 정수가 한번씩 등장
- order[i]는 기존의 컨테이너 벨트에 order[i]번째 상자를 i+1번째로 트럭에 실어야 함을 의미
나의 풀이
from collections import deque
def solution(order):
answer = 0
temp = [i for i in range(1,len(order)+1)]
q = deque(temp)
o = deque(order)
stack = []
while q:
if o[0] == q[0]:
o.popleft()
q.popleft()
answer+=1
else:
if stack != [] and stack[-1] == o[0]:
o.popleft()
stack.pop()
answer+=1
else:
stack.append(q.popleft())
if o == []:
return answer
while o:
if stack[-1] == o[0]:
stack.pop()
o.popleft()
answer+=1
else:
break
return answer
4번 문제
문제 설명
직사각형 모양의 공간에 동전들을 뒤집는 놀이를 하고 있다. 동전은 앞과 뒤가 구분되어 있고 동전을 뒤집으면 같은 줄에 있는 모든 동전을 뒤집어야 한다. (행, 열 뒤집기)
최소 몇 번의 동전을 뒤집어야 목표 상태가 되는지 구합니다. (없으면 -1 return)
나의 풀이
모르겠다ㅠㅠ
최종 점수 : 300점
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 (0) | 2022.08.22 |
---|---|
[프로그래머스] 여행 경로 (0) | 2022.08.20 |
[프로그래머스] 실패율 (0) | 2022.08.18 |
[프로그래머스] 소수 만들기 (0) | 2022.08.18 |
[프로그래머스] 최소직사각형 (0) | 2022.08.18 |