일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 미래에셋 공모전
- CRM
- 데이터 분석 포트폴리오
- 두잇알고리즘코딩테스트
- 교환학생 장학금
- 데이터 시각화 포트폴리오
- HEG
- 리뷰분석
- 제네바
- 패스트캠퍼스 #자료구조 #코딩테스트 #배열
- 무신사 데이터분석
- tableau
- 데이터 포트폴리오
- 교환학생주거
- 파이썬
- 아셈듀오
- 데이터공모전
- 텍스트분석 시각화
- MairaDB
- 아셈듀오 선정
- 키워드시각화
- 제네바기숙사
- 태블로
- 교환학생
- 공모전후기
- 태블로 포트폴리오
- 제네바주거
- 테이블계산
- 제네바경영대학교
- 아셈듀오 후기
- Today
- Total
민듀키티
[240510] 코딩테스트 문제풀이 본문
1. 2개 이하로 다른 비트
- 짝수일 때 : 가장 뒷쪽에 있는 0 숫자를 1로 바꿔줌
- 홀수일때 : 가장 뒷쪽에 있는 0 숫자를 1로 바꿔줌 -> 그런 다음, idx + 1 의
https://school.programmers.co.kr/learn/courses/30/lessons/77885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(numbers):
answer = []
for number in numbers :
bin_number = list('0' + bin(number)[2:]) #bin함수를 사용해서 이진수 형태로
idx = ''.join(bin_number).rfind('0') # rfind 함수 사용 -> 가장 뒤에 0이라는 값이 몇 번째 인덱스 ?
bin_number[idx] = '1'
if number % 2 == 1 :
bin_number[idx + 1] = '0'
answer.append(int(''.join(bin_number),2)) #다시 10진수 형태로 바꿔줌
return answer
2. 좋은단어
https://www.acmicpc.net/problem/3986
n = int(input())
count = 0
for k in range(n) :
word = list(input())
stack = []
for i in word :
if len(stack) == 0 :
stack.append(i)
elif stack[-1] == i :
stack.pop()
else :
stack.append(i)
if len(stack) == 0 :
count += 1
print(count)
3. 균형잡힌 세상
https://www.acmicpc.net/problem/4949
while True :
word = input()
stack = []
if word == '.' :
break
for i in word :
if i in ['[',']','(',')']:
if len(stack) == 0 :
stack.append(i)
elif (stack[-1] == '[' and i == ']') or (stack[-1] == '(' and i == ')') :
stack.pop()
else :
stack.append(i)
if len(stack) == 0 :print('yes')
else : print('no')
4. AC (🥲해결못함)
- 런타임 에러 (Valueerror) 원인을 못 찾겠다 정말 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
from collections import deque
m = int(input())
for _ in range(m) :
word = input()
n = int(input())
A = input()
# 리스트로 바꾸기
A = deque(A[1:-1].split(","))
direction = 1
for i in range(len(word)) :
a = word[i]
if len(A) == 0 and a == 'D' :
print('error')
break
if a == 'R' :
direction *= -1
elif direction > 0 and a == 'D' :
A.popleft()
elif direction < 0 and a == 'D' :
A.pop()
if len(A) == 0 :
print("error")
else :
if direction < 0 :
A = list(map(int, A))
A.reverse()
print(A)
else :
A = list(map(int, A))
print(A)
5. 할인행사
- 문제 정확히 읽어야 함.. 총 몇 개인지 !!! 최소가 아니라 !!! 제발 제발 ㅠㅠ 쓸데없는데 고민 시간 낭비 하지 말자고 !!!!!!!!
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import Counter
def solution(want, number, discount):
dict_a = {}
for i in range(len(number)) :
dict_a[want[i]] = number[i]
answer = 0
for i in range(len(discount) - 9) :
start_index = i
end_index = i + 10
dict_b = Counter( discount [ start_index : end_index ] )
if dict_a == dict_b :
answer += 1
return answer
6. 귤 고르기
- 내가 dict를 다루는 법을 참 몰라서,, 맨날 list로 바꿈 --> 엄청난 반성과 노력 필요
- Counter 함수에 냅다 list 하면, keys values 엉망됨.. -> 이유는 모름.. ㅜㅜ
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import Counter
def solution(k, tangerine):
dict_count = (Counter(tangerine))
dict_list = list(zip(dict_count.values(),dict_count.keys()))
dict_list.sort(reverse=True)
answer_set = set()
answer = 0
for i in range(len(dict_list)) :
if answer >= k :
break
else :
answer += dict_list[i][0]
answer_set.add(dict_list[i][1])
return len(answer_set)
7. 영어 끝말잇기
https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import math
def solution(n, words):
TF = True
for i in range(0,len(words)) :
if i == 0 :
continue
elif (words[i-1][-1] != words[i][0]) or (words[i] in words[0:i-1]) :
TF = False
break
if TF :
answer = [0,0]
else :
turn_count = math.ceil((i+1)/n)
turn_people = (i+1) % n
if turn_people == 0 :
turn_people = n
answer = [turn_people, turn_count]
return answer
8. 점프와 순간이동
https://school.programmers.co.kr/learn/courses/30/lessons/12980
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- dp로 풀면.. 시간초과 발생함
def solution(n):
d = [0 for _ in range(n+1)]
d[1] = 1
for i in range(2,n+1) :
if i%2 == 0 :
d[i] = min(d[i-1]+1, d[i//2])
else :
d[i] = d[i-1]+1
return d[-1]
- 그나마 효율성 있는 코드인데,, 그래도 2개의 케이스에서 시간초과 발생
- 2로 n을 나누면서 홀수만나면 count 값 증가..
def solution(n):
count = 1
while n > 1 :
if n%2 == 0 :
n /= 2
else :
n = n-1
count += 1
return count
- 정답 코드 : 위에 방식이랑 똑같음... 홀수면 count 값에 1을 더해주고, 계속해서 2을 나누기
def solution(n):
count = 1
while n > 1 :
count += n%2
n //=2
return count
9. N개의 최소공배수
- 유클리드 호제법 개념 이용해서 풀기..
- 큰 수를 작은 수로 나누는 MOD 연산 수행
- 앞 단게에서 작은 수와 MOD 연산 결괏값(나머지)으로 MOD 연산 수행
- 나머지 값이 0이 되는 순간의 작은 수를 최대 공약수로 선택
https://school.programmers.co.kr/learn/courses/30/lessons/12953
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(arr):
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
number = arr[0]
for i in range(len(arr)) :
a = gcd(number, arr[i])
number = ( number * arr[i]) / a
return int(number)
10. 프로세스(⭐️복습하기)
- 인덱스와 값 같이 계산하는 법
- queue = [(i,j) for i,j in enumerate(리스트)]
- 값이 하나라도 있으면 -> any
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(priorities, location):
queue = [(i,j) for i,j in enumerate(priorities)]
count = 0
while True :
number = queue.pop(0) #가장 왼쪽 첫번째 요소 제거
if any(number[1] < j[1] for j in queue) : #하나라도 있으면 !!
queue.append(number) # 다시 append 시켜주기
else :
count += 1
if location == number[0] :
return count
11. 야근지수
시간초과
def solution(n, works):
for i in range(n) :
if len(works) == 0:
break
max_number = max(works)
works.remove(max_number)
if max_number != 1 :
works.append(max_number - 1)
answer = 0
for i in works :
answer += i * i
return answer
힙을 공부해야겠다 .. !!
# 파이썬의 heapq 모듈로 힙 자료구조 사용하기
# 모듈 불러오기
from heapq import heappush, heappop
# 힙 생성 : 파이썬에서 heap 생성할 땐, 리스트 선언과 같음
heap = []
# 힙에 원소 추가
heap = []
heappush( heap, 4 )
heappush( heap, 1 )
heappush( heap, 7 )
heappush( heap, 3 )
heappush( heap, 8 )
heappush( heap, 5 )
print(heap) #[1, 3, 5, 4, 8, 7]
# 1
# / \
# 3 5
# / \
# 4 8
# 힙에서 원소 삭제
heappop(heap)
print(heap) # [3, 4, 5, 7, 8]
heappop(heap)
print(heap) # [3, 4, 5, 7, 8] -> 원소가 제거될 때마다 재배치가 일어나는 것을 알 수 있음
# 최소값을 삭제하지 않고 접근하기
print(heap[0])
# 기존 리스트를 힙으로 변환 -> heapify
from heapq import heapify
heap = [4,1,5,3,8,5]
heapify(heap)
print(heap) # [1, 3, 5, 4, 8, 5]
# [응용] 최대힙
from heapq import heappush, heappop
nums = [4,1,5,3,8,5]
heap = []
for num in nums :
heappush(heap, (-num,num))
while heap :
print(heappop(heap)[1])
# [응용] n번째 최소값 / 최대값
from heapq import heappush, heappop
def nth_smallest(nums, n) :
heap = []
for num in nums : # 혹은 heapify 호출해서 heapift(nums) 해줘도 됨 !!
heappush(heap,num)
nth_min = None
for _ in range(n) :
nth_min = heappop(heap)
return nth_min
# 혹은 nsmallest
from heapq import nsmallest
print(nsmallest(3,[4,1,7,3,8,5]))
# nlargest
from heapq import nlargest
print(nlargest(3,[4,1,7,3,8,5]))
✅ 힙으로 해결하는 풀이법 ✅
import heapq
def solution(n, works):
if n >= sum(works) :
return 0
works = [-w for w in works ]
heapq.heapify(works)
for _ in range(n) :
i = heapq.heappop(works)
i += 1
heapq.heappush(works, i)
return sum([w ** 2 for w in works])
12. 최대 힙
https://www.acmicpc.net/problem/11279
import sys
input = sys.stdin.readline
from heapq import heappush, heappop
n = int(input())
heap = []
for i in range(n) :
number = int(input())
if number != 0 :
heappush( heap, (- number, number ) )
if number == 0 :
if len(heap) == 0:
print(0)
else :
print(heappop(heap)[1])
13. 최소 힙
https://www.acmicpc.net/problem/1927
import sys
input = sys.stdin.readline
from heapq import heappush, heappop
n = int(input())
heap = []
for i in range(n) :
number = int(input())
if number != 0 :
heappush (heap, number)
else :
if len(heap) == 0 :
print(0)
else :
print(heappop(heap))
'Coding Test > Python' 카테고리의 다른 글
[240512] 코딩테스트 문제풀이 (0) | 2024.05.12 |
---|---|
[240511] 코딩테스트 문제풀이 (0) | 2024.05.11 |
[240509] 코딩테스트 문제풀이 (0) | 2024.05.09 |
[240508] 코딩테스트 문제풀이 (0) | 2024.05.09 |
[240507] 코딩테스트 문제풀이 (0) | 2024.05.07 |