코딩테스트

하루 코테 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"