9roomthon 구현 2일차: 프로젝트 매니징

PEA은하·2023년 8월 15일
post-thumbnail

Problem


문제 설명

C분 이후의 시각을 계산한다.

  1. 분 단위는 60을 초과하면, 몫을 시간 단위로 올리고 나머지만 남긴다.
  2. 시간 단위는 24를 초과하면, 몫을 버리고 나머지만 남긴다.

필요한 명령어

PythonC++C
연산자
- 실수 나눗셈 기호
- 정수 나눗셈 기호
- 나머지 계산 기호

/
//
%

/

%

/

%
몫과 나머지 계산div, mod = divmod( denom, num )--

Submitted Code


Python

1 N = int(input())
2 T, M = map(int, input().split())
3
4 works = [int(input()) for _ in range(N)]
5
6 hour, M = divmod(M + sum(works), 60)
7 T = (T + hour) % 24
8 print(T, M)

Line 1

개발이 필요한 기능의 개수 N을 입력받는다.

Line 2

시간과 분을 TM에 입력받는다.

Line 4

N개의 줄에 나누어 입력되는 데이터를 works 리스트에 저장한다.

Line 6

기능 개발에 필요한 시간의 총합(분)과 현재 시각의 M 분을 더하고, 60으로 나누어 hour 시간 M분으로 업데이트한다.

Line 7

현재 시각의 T 시간과 hour 시간을 더하고, 24로 나누어 경과한 시간을 계산한다.

Line 8

개발 종료 시각을 출력한다.

C++

 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4     int N, T, M;
 5     cin >> N;
 6     cin >> T >> M;
 7	
 8     int works = 0, work;
 9     for (int i = 0; i < N; i++){
10         cin >> work;
11         works += work;              // M에 바로 더해도 됨
12     }
13	
14     M += works;
15     T = (T + M / 60) % 24;
16     M %= 60;
17	
18     cout << T << " " << M << endl;
19     return 0;
20 }

C

 1 #include <stdio.h>
 2 int main() {
 3     int N, T, M;
 4     int work;
 5     int i;
 6	
 7     scanf("%d", &N);
 8     scanf("%d %d", &T, &M);
 9	
10     for (i = 0; i < N; i++){
11         scanf("%d", &work);
12         M += work;
13     }
14	
15     T = (T + M / 60) % 24;
16     M %= 60;
17	
18     printf("%d %d", T, M);
19     return 0;
20  }

정수 나눗셈 기호

정수 나눗셈 기호는 파이썬의 독특한 산술 연산자이다. 버전 2.x까지는 다른 프로그래밍 언어들과 마찬가지로 slash(/) 기호를 사용해 정수 / 정수 = 정수 계산을 했지만, 버전 3.x부터 실수 나눗셈 기호(/)와 정수 나눗셈 기호(//)를 분리해 사용하도록 했다.

PEP 238에 따르면, 다음과 같은 2가지 이유로 정수 나눗셈 기호를 도입했다고 한다.

  1. 에러 발생율 감소
    • 파이썬은 변수를 선언할 때 자료형을 지정하지 않는 동적 언어이다 보니, 산술 연산 결과의 자료형이 예상과 다른 에러를 맞닥들이게 될 때가 있다. 특히 나눗셈이 포함된 경우 자료형을 항상 신경써야 하는 문제가 있었는데, 이를 해결하기 위해 수학의 나눗셈과 같이 2 / 4 = 0.5를 출력하도록 수정하고자 하였다.
  2. 파이썬의 숫자 모델 통합
    • 초창기 파이썬의 숫자 모델은 C와 유사했는데, 파이썬의 모토인 "영어로 이해할 수 있는 코드"를 만들기 위해 일상 숫자와 유사하게 사용할 수 있도록 수정하고자 하였다.



divmod 함수 vs. //와 % 연산자

파이썬에서 몫과 나머지를 구할 때 2가지 방법을 사용할 수 있다.

  1. divmod 함수 사용하기
div, mod = divmod( 5, 2)
print(div, mod)           # 출력 결과: 2, 1

divmod 함수는 몫과 나머지를 계산해서 튜플 형식으로 반환한다.

  1. 나눗셈 연산자 사용하기
div = 5 // 2
mod = 5 % 2
print(div, mod)           # 출력 결과: 2, 1



Code Review

Python

  • 시간을 모두 분 단위로 바꾸는 방법으로 계산
time = (T * 60 + M + sum(c)) % 1440

hour = time // 60
minute = time % 60

숫자를 크게 만드는 것 같아서 이 방법은 안 썼는데, 파이썬의 읽기 쉬운 코드에 더 적합한 코드인가?

C++

int main() {
	int N, T, M;
	cin >> N >> T >> M;
}
  • cin >> N >> T >> M;
    cin에서 \n나 공백이나 상관없이 사용해도 됨

Callenge Review

C/C++에서 배열을 안 쓰려고 했더니 오히려 짧은 코드가 나왔다.

Reference

0개의 댓글