알고리즘/C++ 풀이 기록

백준 - 1755 숫자놀이

swanim 2021. 10. 14. 21:43

 

https://www.acmicpc.net/problem/1755

 

1755번: 숫자놀이

79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

www.acmicpc.net

 

1. 문제 풀이 아이디어

정렬을 이용하긴 하지만 정렬을 거들뿐. 

1. vector를 pair로 이용할 수 있는가

2. 나누기와 나머지 연산을 적절하게 이용할 수 있는가

이 두 개가 주요한 문제 풀이 아이디어이다. 

 

2. 풀이 코드(C++)

 

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
vector <pair<string, int>> v1;
string num[11] = { "zero" ,"one" ,"two" ,"three" ,"four" ,"five" ,"six" ,"seven" ,"eight" ,"nine" };
string s;

int main(void) {
	int a, b;
	scanf("%d %d", &a, &b);

	for (int i = a; i <= b; i++) {
		if (i >= 10) {
			s = num[i / 10] + " " + num[i % 10];
			v1.push_back({ s,i });
		}
		else {
			s = num[i % 10];
			v1.push_back({ s,i });
		}
	}
	sort(v1.begin(), v1.end());

	for (int i = 0; i < v1.size(); i++) {
		printf("%d ", v1[i].second);
		if (i % 10 == 9) printf("\n");
	}
}

 

3. 배운점

v1[i].second 이 표현을 쓰기 위해서는 [] 배열 형태여야지 가능하단 사실. v1.second 는 불가능하다.