본문 바로가기
Algorithm/🏫assignment

# Test

by yewoneeee 2022. 9. 3.

# 문제

 

# 입력 및 출력

제한조건: 프로그램의 이름은 test.{c,cpp,java}로 한다.

 

 

# 풀이

#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

ifstream fin("test.inp");
ofstream fout("test.out");

map<string, int> last_name;
tuple<string, string, string> person[1000];

bool compare(tuple<string, string, string> a, tuple<string, string, string> b) {
	return get<0>(a) < get<0>(b);
}

int main() {
	int n, max_length = 0;
	string sid, first, last;
	fin >> n;
	for (int i = 0; i < n; i++) {
		fin >> sid >> first >> last;
		person[i] = make_tuple(sid, first, last);
		max_length = max(max_length, (int)first.size());
		last_name[last]++;
	}
	sort(person, person + n, compare);

	//cout << max_length << "\n";
	for (int i = 0; i < n; i++) {
		// 1. 반복문으로 max_length 값에서 first.size()값 빼서 공백 추가
		// 2. 공백 30칸짜리 string 만들어서 substring 해서 붙이기
		// 결국 시간복잡도는 동일 -> 1번으로 해결
		fout << get<0>(person[i]) << " " << get<1>(person[i]) << " ";
		for (int j = get<1>(person[i]).size(); j < max_length; j++) {
			fout << " ";
		}
		fout << get<2>(person[i]) << "\n";
	}

	fout << "\n";
	for (auto ln : last_name) {
		if (ln.second != 1) {
			fout << ln.first << " " << ln.second << "\n";
		}
	}
}

첫번째 이름의 최대 길이를 구하기 위해 max메소드를 사용해서 최대값을 구해줬다.

여기서 string의 size메소드가 size_t를 리턴해서 signed, unsigned 차이로 경고창이 떴다.

경고를 없애기 위해 int형으로 바꿔주었다.

http://mwultong.blogspot.com/2007/06/c-sizet-unsigned-int.html

 

C언어] size_t 형의 의미; unsigned int와 차이점, 차이

size_t 는 unsigned int 이며, 문자열이나 메모리의 사이즈를 나타낼 때 사용합니다. "unsigned int"를 typedef unsigned int size_t; 이렇게 size_t 라는 이름으로 정의해 놓은 것입니다. size_t 는, 32비트 운영체제에

mwultong.blogspot.com

 

그리고 fisrt name의 최대 길이에 맞게 나머지 이름에 공백을 넣어줘야 하는데

반복문을 줄일 방법이 없을까 했지만 결국 1, 2 방법 모두 시간 복잡도가 O(n)이므로 간편한 1번 방법을 선택했다.

 

그리고 last name의 개수가 여러개이면 출력해줘야해서 마지막 반복문을 작성했다.

auto를 사용하면 map을 key값 없이도 조회할 수 있게 된다.

 

pair을 자주 사용하다보니 tuple 접근법을 까먹어서 찾아보았다.

https://www.crocus.co.kr/598

 

튜플(Tuple) STL 사용 방법

튜플(Tuple)이란? #include 헤더 파일에 존재하는 STL이다. tuple은 pair와 같이 묶는다는 개념은 같지만, pair는 두개만 묶을 수 있는 반면, tuple은 여러 개를 묶을 수 있다. pair처럼 .first, .second, .third..

www.crocus.co.kr

 

 

'Algorithm > 🏫assignment' 카테고리의 다른 글

# Interesting Gain  (0) 2022.09.11
# 계단 오르기  (0) 2022.09.09
# Spin And Slide  (0) 2022.09.04
# Bowling 점수 계산하기  (0) 2022.07.09
# 교차점 계산  (0) 2022.07.04

댓글