본문 바로가기
Programming/Solving_problems

[기본_7문제_풀기/제주코딩베이스캠프] 3. 섬 건너기

by lineho 2020. 7. 6.
반응형

3. 섬 건너기

 1) 문제: A, B 두명이 배를 타고 섬을 건넙니다. 배를 타기위해 많은 사람이 대기 중입니다. 조건과 아래의 입출력을 만족시키시오.

  - 조건: A, B는 무조건 같이 승선해야 한다.(승선 순서는 A -> B 이며 같이 승선 못할시 다음 것을 탄다.)

  - 조건: 한 배에 탈 수 있는 인원은 정시에는 25명, 10분마다 15명 입니다.

  - 조건: 배는 매일 9시부터 21시 전까지(21시 미 포함) 10 분 단위로 들어옵니다.

  - 조건: 1월은 1024일, 2월은 512일, 3월은 256일, 4월은 128일, 5월은 64일, 5월은 32일, 6월은 16일, 7월은 8일, 9월은 4일, 10월은 2일이며, 10월까지밖에 없습니다.

  - 조건: 시간의 개념은 동일합니다. (하루는 24시간, 1시간 60분, 1분 60초), 현재 날짜는 2020년 1월 1일 입니다.

  - 조건: B가 화장실이 급하다 하여 화장실을 갔으며, 현재시간에 '분' 만큼 배의 출발 시간이 늦어집니다.

**입력**
대기인원 = 14000605

**출력**
2025년 2월 413일 11시 0분 출발

**입력**
대기인원 = 1200202

**출력**
2020년 1월 1000일 11시 0분 출발


 2) 문제 풀이 

import  datetime

대기인원 = 14000605

def solution(대기인원):
    # 1년의 날짜수
    num_days_per_year = 0
    for i in range(10, 0, -1):
        num_days_per_year += 2 ** i
    print("num days per year:", num_days_per_year)

    daily_boarding = 대기인원 // 1200

    # '년'
    year = daily_boarding // num_days_per_year
    print("year:", year)

    #대기 '년'을 뺀 나머지 날짜들.
    days = daily_boarding % num_days_per_year
    print("days:",days)

    #'월'
    cumulative_days_per_month = 0 #'일'계산을 위해 필요.
    month = 0
    for i in range(10, 0, -1):
        deducation_days = cumulative_days_per_month #'일'계산을 위해 필요.
        cumulative_days_per_month += 2**i
        month += 1
        if cumulative_days_per_month > days:
            break
    print("month:", month)

    #'일'
    day = days - deducation_days
    print("day:",day)

    #몇시에 탔는지 계산하기
    num_left_day=대기인원 % 1200
    print("num left day:", num_left_day)

    #출발 '시간'
    hour = num_left_day//100+9
    print("hour:",hour)

    #출발 '분'
    start_minute = [25, 40, 55, 70, 85, 100]
    remaining_number = num_left_day % 100
    for i in start_minute:
        if i>remaining_number:
            minute = start_minute.index(i) * 10
            break
    print("minute:",minute)

    today_minute = datetime.datetime.today()
    today_minute = today_minute.minute

    if(remaining_number % 100 == 99):
        hour += 1
        minute = 0

    if(today_minute + minute > 60):
        minute = (today_minute + minute) - 60
        hour += 1

    return print(f'{year+2020}년, {month}월 {day}일, {hour}시, {minute}분 출발')

solution(대기인원)

 

 

 

※참고자료: 인프런 - 눈떠보니 코딩 테스트 전날! 강좌

※참고자료: 나무위키

※Copyright 사도출판 All rights reserved.

※본 게시물 속 내용을 통해 직접적으로 상업적인 목적이 없으며 게시물은 개인 공부 목적 및 지식 간단 전파목적으로 사용되었음을 명시함. 책 및 인터넷 검색을 참고자료로 하여 실습 및 학습을 한 내용을 올림. 참고한 책 및 인터넷 검색물의 저작권을 존중하므로 책 및 인터넷 저작물의 일부 또는 전부를 무단 복제 및 무단 전재 및 재배포하지 않음(일부라 함은 30%이하의 내용 중복은 불포함[30%이하는 다른 저작물로 간주]). 또한 책 또는 매체를 구매하지 않고는 정확한 내용을 알 수 없으며 개인이 따로 공부한 내용도 추가 되어 책과는 내용이 매우 상이할 수 있음.즉 본 게시물 작성자는 이 게시물을 읽는 모든 사람들이 책을 구매거나 인터넷 검색을 더하여 지식을 같이 나누었으면 좋겠음.

반응형