코딩테스트
하루 코테 3개 풀기 - 17일차
songsua
2024. 12. 28. 18:29
1. 구명보트
https://school.programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
#한번에 최대 2명씩
#구명보트를 적게 사용하여 모든 사람을 구출
from collections import deque
def solution(people, limit):
people.sort()
people_deque = deque(people)
answer = 0
while people_deque : #deque가 사라질때까지 돌릴거임
current_people = people_deque.pop()
print("current_people의 값", current_people)
print("처음의 people_deque = " ,people_deque)
for i in people_deque :
print("i의값", i)
if (current_people + i) <= limit :
people_deque.popleft()
print("people_deque = " ,people_deque)
answer +=1
print("if절일때",answer)
break
else:
answer +=1
print("elif절일때 answer = ",answer)
return answer
print(solution([70, 80, 50, 50] , 100))
했는데 시간 초가 뜬다.. for 구문을 사용해서 인데,
for 구문을 없애고 다시 작성해봤다.
#한번에 최대 2명씩
#구명보트를 적게 사용하여 모든 사람을 구출
from collections import deque
def solution(people, limit):
people.sort()
people_deque = deque(people)
answer = 0
while people_deque : #deque가 사라질때까지 돌릴거임
current_people = people_deque.pop()
print("current_people의 값", current_people)
print("처음의 people_deque = " ,people_deque)
if people_deque and (current_people + people_deque[0]) <= limit : # people_deque가 먼저 비어있는지 확인하고, 가장 무거운 current_people 와 people_deque을 비교
people_deque.popleft() #합산해서 limit 보다 작은걸 확인했으니, 가장 가벼운애를 제거
answer +=1 #가장 작은애랑 더해도 limit 넘으니 그냥 보트 혼자쓰라고 하고 answer 에 +1
return answer
print(solution([70, 80, 50, 50] , 100))
2. 출석체크
Q. 오늘 수업에 많은 학생들이 참여했습니다. 단 한 명의 학생을 제외하고는 모든 학생이 출석했습니다.
모든 학생의 이름이 담긴 배열과 출석한 학생들의 배열이 주어질 때, 출석하지 않은 학생의 이름을 반환하시오.
all_students = ["나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위"]
present_students = ["정연", "모모", "채영", "쯔위", "사나", "나연", "미나", "다현"]
set을 활용하여 작성할 경우,
def get_absent_student(all_students, present_students):
absent_student = set(all_students) - set(present_students)
return absent_student.pop()
all_students = ["나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위"]
present_students = ["정연", "모모", "채영", "쯔위", "사나", "나연", "미나", "다현"]
print(get_absent_student(all_students, present_students))
print("정답 = 예지 / 현재 풀이 값 = ",get_absent_student(["류진","예지","채령","리아","유나"],["리아","류진","채령","유나"]))
print("정답 = RM / 현재 풀이 값 = ",get_absent_student(["정국","진","뷔","슈가","지민","RM"],["뷔","정국","지민","진","슈가"]))
def get_absent_student(all_students, present_students) :
dict = {}
for student in all_students :
dict[student] = True
for student in present_students :
del dict[student]
for student in dict.keys():
return student
print("정답 = 예지 / 현재 풀이 값 = ",get_absent_student(["류진","예지","채령","리아","유나"],["리아","류진","채령","유나"]))
print("정답 = RM / 현재 풀이 값 = ",get_absent_student(["정국","진","뷔","슈가","지민","RM"],["뷔","정국","지민","진","슈가"]))
3. 코드처리하기
https://school.programmers.co.kr/learn/courses/30/lessons/181932
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(code):
answer = []
mode = 0 # 초기 mode 설정
for i in range(len(code)):
if code[i] == "1":
mode = 1 - mode # mode를 0과 1 사이로 전환
continue
if mode == 0 and i % 2 == 0: # mode가 0이고 인덱스가 짝수일 때
answer.append(code[i])
elif mode == 1 and i % 2 != 0: # mode가 1이고 인덱스가 홀수일 때
answer.append(code[i])
return ''.join(answer) if answer else "EMPTY"