[백준] 1431번 : 시리얼 번호 | vector 구조체 (C++)

2024. 3. 18. 01:55·Programming/C++ - 백준
반응형

문제


풀이

'구조체를 이용한 벡터'로 풀이했다. 

 

비슷한 정렬 문제 풀이를 아래에 첨부한다. 아래는 vector에 구조체를 넣어 같은 방식으로 풀이한 정렬 문제이다.

 

 

[백준] 10825번 : 국영수 (C++)

문제 풀이 vector에 구조체를 넣어 풀이했다. 아래는 array에 구조체를 넣어 풀이한 문제이다. 또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽

jigoo-log.tistory.com

 

array에 구조체를 넣어 풀이한 정렬 문제이다.

또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽어보는걸 추천한다! 👍👍

 

 

[백준] 11650번 : 좌표 정렬하기 | Sort 함수와 Compare & Array와 Vector 풀이 (C++)

문제 풀이 '이차원 벡터'와 '이차원 배열'로 풀이했다. 총 세 가지의 풀이로 문제를 해결했다! [ '이차원 벡터' 풀이 ] 1. 이차원 벡터 선언 vector v; // 이차원 벡터 선언 2. 이차원 벡터 요소 입력 for

jigoo-log.tistory.com

 

 1. vector를 선언하기 위한 구조체(struct) 생성

 

struct serial {		// vector 구조체 생성
	string str;
	int jarisu = 0, length = 0;
};

 

 2. 구조체 vector 선언

 

	vector<serial> v;	// 구조체 vector 선언

 

 3. 구조체 이름 설정, 구조체의 각 값에 입력 값 저장 

자릿수를 구해서 저장하는게 중요!

 

	for (int i = 0; i < n; i++) {
		cin >> s;
		l = s.length();

		serial code;    // 구조체의 이름 설정
		code.str = s;    // 구조체의 각 값에 입력받은 값 저장
		code.length = l;

		for (int k = 0; k < s.length(); k++) {	// 아스키코드 이용해서 자릿수 구하고 저장
			if (0 <= (s[k] - 48) && (s[k] - 48) <= 9) {
				j += (s[k] - 48);
			}
		}
		code.jarisu = j;

		j = 0;	// 꼭 자릿수 초기화시켜줘야 함

		v.push_back({ code.str, code.jarisu, code.length });    // vector에 붙임
	}

 

 4. 조건에 맞게 정렬

 

 // 사용자 지정 compare
bool compare(serial a, serial b) {	// (주의) a.str 뒤에 괄호 없음
	if (a.length == b.length && a.jarisu == b.jarisu) {	// 3. 길이와 자릿수가 모두 같다면,
		return a.str < b.str;	// 사전 순대로(아스키코드 순)
	}
	else if (a.length == b.length) {	// 2. 길이만 같다면,
		return a.jarisu < b.jarisu;	// 자릿수를 오름차순으로
	}
	else {
		return a.length < b.length;	// 1. 길이 순으로
	}
}

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

 

5. 구조체 vector에서 str 값만 출력

 

	for (int i = 0; i < n; i++) {
		cout << v[i].str << "\n";
	}

 


코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct serial {		// vector 구조체 생성
	string str;
	int jarisu = 0, length = 0;
};

 // 사용자 지정 compare
bool compare(serial a, serial b) {	// (주의) a.str 뒤에 괄호 없음
	if (a.length == b.length && a.jarisu == b.jarisu) {	// 3. 길이와 자릿수가 모두 같다면,
		return a.str < b.str;	// 사전 순대로(아스키코드 순)
	}
	else if (a.length == b.length) {	// 2. 길이만 같다면,
		return a.jarisu < b.jarisu;	// 자릿수를 오름차순으로
	}
	else {
		return a.length < b.length;	// 1. 길이 순으로
	}
}

int main() {
	int n, j = 0, l;
	string s;
	vector<serial> v;	// 구조체 vector 선언

	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> s;
		l = s.length();

		serial code;    // 구조체의 이름 설정
		code.str = s;    // 구조체의 각 값에 입력받은 값 저장
		code.length = l;

		for (int k = 0; k < s.length(); k++) {	// 아스키코드 이용해서 자릿수 구하고 저장
			if (0 <= (s[k] - 48) && (s[k] - 48) <= 9) {
				j += (s[k] - 48);
			}
		}
		code.jarisu = j;

		j = 0;	// 꼭 자릿수 초기화시켜줘야 함

		v.push_back({ code.str, code.jarisu, code.length });    // vector에 붙임
	
		// cout << v[i].str << " " << v[i].jarisu << " " << v[i].length << "\n";   // 출력 확인용 코드
	}

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

	for (int i = 0; i < n; i++) {
		cout << v[i].str << "\n";
	}

	return 0;
}

결과

 

 

1431번: 시리얼 번호

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

www.acmicpc.net

 

반응형
저작자표시 (새창열림)

'Programming > C++ - 백준' 카테고리의 다른 글

[백준] 1920번 : 수 찾기 | binary search (C++)  (0) 2024.04.01
[백준] C++로 풀이 시 시간 초과가 난다면?  (2) 2024.03.28
[백준] 11656번 : 접미사 배열 | string.substr() 함수를 이용한 '부분 문자열 추출' (C++)  (1) 2024.03.14
[백준] 10825번 : 국영수 (C++)  (2) 2024.03.14
[백준] 11650번 : 좌표 정렬하기 | Sort 함수와 Compare & Array와 Vector 풀이 (C++)  (0) 2024.03.14
'Programming/C++ - 백준' 카테고리의 다른 글
  • [백준] 1920번 : 수 찾기 | binary search (C++)
  • [백준] C++로 풀이 시 시간 초과가 난다면?
  • [백준] 11656번 : 접미사 배열 | string.substr() 함수를 이용한 '부분 문자열 추출' (C++)
  • [백준] 10825번 : 국영수 (C++)
지구코드
지구코드
IT를 공부하고 있는 지구의 코딩공간입니다!
  • 지구코드
    지구의 코딩공간
    지구코드
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 개발 기록 N
      • Back-end
        • Spring
        • Django
      • Programming
        • 알고리즘
        • C++ - 백준
      • Cloud
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    부분 문자열 추출
    Cloud
    피보나치 수
    시간복잡도
    미래에셋해외교환장학생
    정렬
    큐
    슬라이딩윈도우
    OutofBounds
    구조체 벡터
    시간초과
    AWS
    awscloudclubs
    edgelocation
    점 찍기
    binary_search
    fill 함수
    별 찍기
    Time comlexity
    해외교환
    reportMissingModuleSource
    C++
    dp
    이진탐색
    Illrastration
    다이내믹 프로그래밍
    백준
    개발동아리
    pair 클래스
    Trival
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
지구코드
[백준] 1431번 : 시리얼 번호 | vector 구조체 (C++)
상단으로

티스토리툴바