[백준] 1431번 시리얼번호

Dragony·2019년 12월 24일
0

코딩테스트

목록 보기
3/29

문제링크 백준 1431

백준시리얼번호.PNG

백준시리얼번호2.PNG

문제를 풀기위해 시리얼번호의 길이와, 자리수의 합을 저장해야한다.
그러므로 serialNum 클래스를 만들어 문자열을 받으면 길이롸 자리수의 합을 갖고 있도록 하고,
sort 함수를 이용해 조건에 맞게 정렬했다.

[코드]

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



class serialNum {
public:
	string num;
	int sum = 0; //숫자 합
	int size; // 문자열 길이
	serialNum(string num) {
		this->num = num;
		this->size = num.size();
		for (int i = 0; i < this->size; i++) {
			if (isdigit(num.at(i))) {
				this->sum += num.at(i) - '0';
			}
		}
	}
	
};


bool compare(serialNum a, serialNum b) {

	if (a.size==b.size) { //길이가 같을경우
		if (a.sum == b.sum) { //자릿수 합이 같으면?
			return a.num < b.num;
		}
		else
			return a.sum < b.sum;
	}

	else
		return a.size < b.size;
}

int main() {

	int N;
	cin >> N;
	vector<serialNum> arr;

	for (int i = 0; i < N; i++) {
		string temp;
		cin >> temp;
		arr.push_back(serialNum(temp));
	}

	sort(arr.begin(), arr.end(), compare);

	for (int i = 0; i < N; i++) {
		cout << arr[i].num << '\n';
	}

	return 0;
}
profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글