티스토리 뷰

Algorithm/BOJ

백준 1431번 C++

poopooreum 2023. 7. 24. 07:27
반응형

백준 1431번 시리얼 번호
https://www.acmicpc.net/problem/1431

1431번: 시리얼 번호

첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어

www.acmicpc.net




정답 코드

#include<iostream>
#include<algorithm>

using namespace std;
int len;
string a[20000];
int sum1(string ab) {
	int sum = 0;
	int length = ab.length();
	for (int x = 0; x < length; x++) {
		if (ab[x] - '0' <= 9 && ab[x] >= 0) {
			sum += ab[x] - '0';
		}

	}
	return sum;

}
bool compare(string a, string b) {
	if (a.length() < b.length())
		return 1;
	else if (a.length() > b.length())
		return 0;
	else {
		int asum = sum1(a);
		int bsum = sum1(b);
		if (asum != bsum)
			return asum < bsum;
		else
			return a < b;
	}
}
int main() {

	cin >> len;
	for (int x = 0; x < len; x++)
		cin >> a[x];
	sort(a, a + len, compare);
	for (int x = 0; x < len; x++) {
		if (x > 0 && a[x] == a[x - 1])
			continue;

		else
			cout << a[x] << endl;
	}

}


문제 풀이
sort함수에서 사용하는 cmp함수를 수정해서 풀 수 있는 문제입니다. 먼저 문자열 배열로 입력을 받고 sort(a,a+len,cmp)를 선언하여 정렬을 시작합니다.
이때
sort를 사용하기 위해서 <algorithm>이라는 헤더파일을 사용해야 합니다. 그 다음 cmp함수에서 각 조건에 맞게 if문들을 선언합니다. 1번 조건이 길이이므로 string에 있는 length()함수를 사용합니다. return 1return true와 의미가 같습니다. 이런 식으로 2번 조건 3번 조건을 차례대로 적어서 적용시키면 문제를 해결할 수 있습니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 1476번 C++  (0) 2023.07.24
백준 1463번 C++  (0) 2023.07.24
백준 1427번 C++  (0) 2023.07.23
백준 1406번 C++  (0) 2023.07.23
백준 1357번 C++  (0) 2023.07.23
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함