algolab은 국민대학교 소프트웨어학부 수업에서 사용되는 온라인 저지?(과제 제출 사이트)입니다.
1주차 과제 제출 기한이 지났고 사이트 내에서 코드도 열람이 가능해졌기 때문에 풀이를 정리해도 될 것 같아 정리해보겠습니다.
1. 주어진 정수의 합 구하기
문제의 범위도 작고, 따로 생각해야 할 부분이 없는 문제입니다.
처음 알고리즘 문제를 접한 사람이라도, 변수의 초기화를 신경을 썼다면 잘 해냈을 것 같습니다.
#include <iostream>
using namespace std;
int T,N,A,S;
int main() {
cin >> T;
while(T--) {
cin >> N;
S = 0;
for(int x = 0; x < N; x++) {
cin >> A;
S+=A;
}
cout << S << "\n";
}
}
2. 주어진 정수의 최대 최소 구하기
이 문제 또한, 바로 구현하면 되는 문제입니다.
최대 최소 문제에서, 무엇을 시작 기준값으로 잡을지에 대해서 고민해보고, 첫번째 값을 기준으로 잡으면 됐습니다.
#include <iostream>
using namespace std;
int T,N,Mx,Mn,A;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--) {
cin >> N >> A;
Mx = Mn = A;
for(int x=1; x<N; x++) {
cin >> A;
if(Mx < A) Mx = A;
if(Mn > A) Mn = A;
}
cout<<Mx << " " << Mn << "\n";
}
}
3. 부활절 날짜 구하기
첫번째 주의 과제 문제중에 제일 복잡했던(짜증났던) 구현 문제입니다.
문제에서 주어지는 값들을 하나하나 체크해가면서 신중하게 구현했으면 해결할 수 있었습니다.
#include <iostream>
using namespace std;
typedef long long ll;
ll tc,Y,C,N,T,I,J,K,L,P,Q,month,day;
int main() {
cin >> tc;
while(tc--) {
cin >> Y;
C = Y/100; // 2
N = Y - (Y/19)*19; //3
T = (C-17)/25; // 4
I = C - (C/4 + (C-T)/3) + N*19 + 15; // 5, 6, 7
J = I - (I/30)*30; // 8
K = J - ((J/28) * (J/28 -1) * (29 / (J+1) * ((21-N)/11))); // 9,10,11,12,13
L = ((Y + Y/4) + J + 2) - C + C/4; // 14, 15
P = L - ((L/7)*7); // 16
Q = K - P; //17
month = (Q+40) / 44 + 3; // 18
day = (Q + 28) - ((month/4)*31); // 19
cout << month << " " << day << "\n";
}
}
4. 두 정수 사이의 모든 정수의 합 구하기
이 문제를 해결하는 방법은 크게 두 가지가 있습니다.
- 반복문(O(n))으로 순회하면서 더하기
- 수학 공식 쓰기
저는 수학 공식을 쓰는 방법을 썼습니다.
a 부터 b까지(a<b)의 자연수의 합을 구하려한다면 ( 0~b 까지의 합) - (0~a-1 까지의 합)을 구하면 됩니다.
#include <iostream>
int T,m,n;
int main() {
std::cin >> T;
while(T--) {
std::cin >> m >> n;
std::cout << (n*(n+1) - m*(m-1))/2 << "\n";
}
}
추가적으로,
ios::sync_with_stdio(0);
cin.tie(0);
이와 같은 코드는 cin의 입력 속도를 빠르게 해준다고만 생각하고 넘어가시면 될 것 같습니다.
Rmx
'KMU > algolab' 카테고리의 다른 글
[KMU - algolab] c++ 프로그래밍 week 5 과제 풀이 (0) | 2020.04.27 |
---|---|
[KMU - algolab] c++ 프로그래밍 week 4 과제 풀이 (0) | 2020.04.20 |
[KMU - algolab] c++ 프로그래밍 파일 입출력 (5) | 2020.04.14 |
[KMU - algolab] c++ 프로그래밍 week 3 과제 풀이 (0) | 2020.04.13 |
[KMU - algolab] c++ 프로그래밍 week 2 과제 풀이 (2) | 2020.04.06 |