백준 10798 세로읽기, 백준 11728 배열합치기
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 10798 세로읽기, 백준 11728 배열합치기

by KyeongMin 2019. 11. 7.
728x90
반응형
#include<stdio.h>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
int main(void)
{
	vector<string> v[5];
	int maxIdx = 0x80000000;
	for (int i = 0; i < 5; i++) {
		string a;
		cin >> a;
		v[i].push_back(a);
		if (maxIdx <(int)a.size())maxIdx = (int)a.size();//최대 길이 뽑아내기 (int) 캐스팅해야 들어감 
	}

	for (int i = 0; i < maxIdx; i++) {
		for (int j = 0; j < 5; j++) {
			if ((int)v[j][0].size() <= i)continue; // 범위를 넘어서는 경우 넘김
			cout << v[j][0][i];
		}
	}
	return 0;

}

세로 읽기의 포인트는 최대 길이의 배열의 인덱스를 잘 저장하고 있다가

그 배열마다 길이가 다른경우에 continue 되게해서 넘겨서 오류가 생기지 않게 출력을 하면됩니다.

어때요 쉽지 않나요? 물론 배열로 해도되는데 벡터로 하면 좀더 간단합니다.

그리고 string으로 백터를 받을때 백터이름.size() 할때 의 숫자가 int 형이 아니고 unsigned int 여서 비교가 제대로

안되는 경우가 있으니 (int) 캐스팅 해서 사용하면 되니 걱정하지 마시고 분명히 맥스값을 뽑아내는게 식이 맞는데

안된다 싶으면 확인해서 구현하시면 됩니다.

#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>	
using namespace std;
int N, M;
vector<int>v;
void init() {
	scanf("%d %d", &N, &M);
	for (int i = 0; i < N; i++) {
		int a;
		scanf("%d", &a);
		v.push_back(a);
	}
	for (int j = 0; j < M; j++) {
		int a;
		scanf("%d", &a);
		v.push_back(a);
	}
	sort(v.begin(), v.end());//벡터 정렬
	for (int i = 0; i < v.size(); i++) {
		printf("%d ", v[i]);// 벡터 출력

	}
	cout << endl;
}
int main(void)
{
	init();//초기화 입력 하자마자 출력
	return 0;
}

이문제는 처음에 문제를 잘 읽긴했는데 예전 버릇으로 중복은 제거해야하는 문제인지 알고 그렇게 구현했다

실패의 쓴맛을 맛본 문제네요 문제 자체는 그냥 정렬해서 출력하면되는 문제인데 순간 맨붕 탔습니다.

여러분들은 실수 하지 마시고 파이팅 ~!

728x90
반응형

댓글