※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Grading Students이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/grading/problem

 

Grading Students | HackerRank

Round student grades according to Sam's rules.

www.hackerrank.com

주어진 점수가 38보다 작다면 그 점수를 그대로 두고, 그렇지 않은 경우 5로 나눈 나머지를 확인해 그 값이 3 이상이라면 5 - (5로 나눈 나머지)를 더해주자.

 

주어지는 grades 벡터를 수정해 그 벡터를 그대로 리턴하는 것으로 구현을 편하게 할 수 있다.

 

아래는 제출한 소스코드이다.

vector<int> gradingStudents(vector<int> grades) {
	for (auto& x : grades) {
		if (x < 38) continue;
		if (x % 5 > 2) x += (5 - (x % 5));
	}
	return grades;
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Time Conversion이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/time-conversion/problem

 

Time Conversion | HackerRank

Convert time from an AM/PM format to a 24 hour format.

www.hackerrank.com

주어진 시각이 AM인 경우와 PM인 경우를 나누어 생각하자

 

AM이 주어진 경우를 생각해보자. 첫 두자리가 "12"인 경우 그 두자리를 "00"으로 바꿔 시각을 표기해야한다. "12"가 아닌 경우 있는 그대로 시각을 표기하면 된다.

 

PM이 주어진 경우를 생각해보자. 첫 두자리가 "12"인 있는 그대로 시각을 표기하면 된다. "12"가 아닌 경우 그 두자리에 있는 수에 12를 더해 시각을 표기를 해야한다.

 

substr을 이용하면 부분문자열을 편하게 잘라내 비교할 수 있다.

 

stoi함수는 주어진 문자열을 정수로, to_string함수는 주어진 정수를 문자열로 바꿔주는 함수이다. 편리한 함수이므로 잘 기억해두자.

 

아래는 제출한 소스코드이다.

string timeConversion(string s) {
	if (s[8] == 'A') {
		if (s.substr(0, 2) == "12") return "00" + s.substr(2, 6);
		else return s.substr(0, 8);
	}
	else {
		if (s.substr(0, 2) == "12") return s.substr(0, 8);
		else {
			int hour = stoi(s.substr(0, 2)) + 12;
			return to_string(hour) + s.substr(2, 6);
		}
	}
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Birthday Cake Candles이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/birthday-cake-candles/problem

 

Birthday Cake Candles | HackerRank

Determine the number of candles that are blown out.

www.hackerrank.com

주어진 벡터에 기록된 각 초의 높이를 살펴보면서, 기존에 살펴보던 초의 높이보다 더 큰 높이의 초가 발견되면 새로운 높이를 기록하면서 초의 개수(답) 변수를 1로 초기화하자. 기존에 알던 가장 큰 초의 높이와 같은 높이의 초를 찾으면 초의 개수(답) 변수를 1 더하자. 이와 같은 코드를 작성하면 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

int birthdayCakeCandles(vector<int> candles) {
	int mx = -1, cnt = 0;
	for (auto& x : candles) {
		if (x > mx) mx = x, cnt = 1;
		else if (x == mx) cnt++;
	}
	return cnt;
}
728x90

'HackerRank > HackerRank Algorithms' 카테고리의 다른 글

[HackerRank // C++] Grading Students  (0) 2022.06.21
[HackerRank // C++] Time Conversion  (0) 2022.06.20
[HackerRank // C++] Mini-Max Sum  (0) 2022.06.18
[HackerRank // C++] Staircase  (0) 2022.06.17
[HackerRank // C++] Plus Minus  (0) 2022.06.16

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Mini-Max Sum이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/mini-max-sum/problem

 

Mini-Max Sum | HackerRank

Find the maximum and minimum values obtained by summing four of five integers.

www.hackerrank.com

algorithm 헤더의 sort를 이용하면 주어진 벡터의 수를 크기순으로 빠르게 정렬할 수 있다.

 

주어진 수들을 정렬 후, 작은 네 개의 수와 큰 네 개의 수의 합을 각각 출력해 문제를 해결하자.

 

단, 네 수의 합이 32비트 정수의 표현범위를 넘을 수 있다는 점에 유의하자.

 

아래는 제출한 소스코드이다.

typedef long long ll;
void miniMaxSum(vector<int> arr) {
	sort(arr.begin(), arr.end());
	cout << (ll)arr[0] + (ll)arr[1] + (ll)arr[2] + (ll)arr[3] << ' ' << (ll)arr[1] + (ll)arr[2] + (ll)arr[3] + (ll)arr[4];
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Staircase이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/staircase/problem

 

Staircase | HackerRank

Print a right-aligned staircase with n steps.

www.hackerrank.com

반복문을 이용해 문제에서 주어진 형태의 계단을 출력하는 문제이다.

 

주어진 n에 대하여, i번째 행(1-based)에 출력해야하는 공백의 개수와 #의 개수가 몇 개인지 계산하고 그 개수에 맞게 각 문자를 출력하는 것으로 한 행을 출력할 수 있다. 이를 각 i에 대하여 진행해 문제를 해결하자.

 

각 행 사이에 개행문자가 들어가야 함에 유의하자.

 

아래는 제출한 소스코드이다.

void staircase(int n) {
	for (int i = 1; i <= n; i++) {
		int space = n - i, sharp = i;
		while (space--) cout << ' ';
		while (sharp--) cout << '#';
		cout << '\n';
	}
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 HackerRank 문제인 Diagonal Difference이다.
문제는 아래 링크를 확인하자.

https://www.hackerrank.com/challenges/plus-minus/problem

 

Plus Minus | HackerRank

Calculate the fraction of positive, negative and zero values in an array.

www.hackerrank.com

주어지는 벡터의 성분들을 살펴 양의 정수, 음의 정수 및 0의 개수를 각각 세자.

 

위에서 구한 개수와 전체 정수의 개수를 이용해 각 종류의 정수의 비율을 소수점 아래 6자리까지 출력하는 것으로 문제를 해결할 수 있다.

 

비율을 계산할 때, 정수끼리의 나눗셈을 그냥 한다면 정수 나눗셈의 몫을 계산하게 되므로 실수의 나눗셈을 구현해야 하는 점에 유의하자.

 

아래의 코드에서 "cout << fixed;"는 실수를 출력할 때 소수점 아래의 자릿수를 고정하기 위해, "cout.precision(6);"은 그 표시되는 자릿수를 6자리로 설정하기 위해 사용되었다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using namespace std;

void plusMinus(vector<int> arr) {
	cout << fixed;
	cout.precision(6);

	int total = arr.size();
	int pos = 0, neg = 0, zero = 0;
	for (auto& x : arr) {
		if (x > 0) pos++;
		else if (x < 0) neg++;
		else zero++;
	}

	cout << (double) pos / total << '\n' << (double) neg / total << '\n' << (double) zero / total;
}
728x90

+ Recent posts