코딩하는 해달이

[level 1] 문자열 내 마음대로 정렬하기 본문

개인 공부/프로그래머스

[level 1] 문자열 내 마음대로 정렬하기

코딩하는 해달 2022. 7. 25. 13:41

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

문제 이해

문자열 벡터에서 각문자열의 n번째 인덱스에 있는 문자를 기준으로 오름차순으로 정렬한다.

 

알고리즘

1. 문자열 리스트를 사전에 먼저 나오는 순서로 정렬시킨다.

2. n번째 인덱스에 있는 문자를 추출해 다른 벡터에 넣어준다.

3. 순차정렬을 이용해 오름차순으로 알파벳을 정렬한다.

4. 문자를 추출한 벡터와 입력받은 문자열 벡터의 n번째 인덱스를 비교하며 같은 순서대로  answer에 집어넣는다.

 

풀이 코드

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

using namespace std;

vector<string> solution(vector<string> strings, int n) {
	vector<string> answer;
	vector<string> chs;
	string tmp;

	sort(strings.begin(), strings.end());

	for (int i = 0; i < strings.size(); i++)
	{
		chs.push_back(strings[i].substr(n, 1));
	}

	for (int j = 0; j < chs.size(); j++)
	{
		for (int i = 0; i < chs.size() - 1; i++)
		{
			if (chs[i] > chs[i + 1])
			{
				tmp = chs[i];
				chs[i] = chs[i + 1];
				chs[i + 1] = tmp;
			}
		}
	}

	for (int i = 0; i < chs.size(); i++)
	{
		for (int j = 0; j < chs.size(); j++)
		{
			if (chs[i][0] == strings[j][n])
			{
				answer.push_back(strings[j]);
				strings.erase(strings.begin() + j);
				break;
			}
		}
	}

	return answer;
}

 

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형
Comments