일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 머신러닝
- stl
- c
- 백준
- 안드로이드
- retrofit
- 스프링 프레임워크
- ADAS
- c++
- 스프링프레임워크
- 스프링
- 프로그래머스
- DP
- Rebase
- python3
- 카카오인코더
- git
- spring
- 연결리스트
- Map
- hackerrank
- 프로그래밍
- Kotlin
- 백트래킹
- TensorFlow
- 인코더
- 블로그개설
- Android
- BFS
- vue.js
Archives
- Today
- Total
이것저것 공부한 기록
C++) 백준 10814번 풀이_나이순 정렬 본문
https://www.acmicpc.net/problem/10814
cin/cout을 쓸 경우 절대적으로 시간 초과가 난다.
scanf/printf로 사용해야 하는데
입력값에 string이 있어서 이런데 익숙하지가 않아서 헤멨다.
또한 입력값으로 string을 받아오긴 하지만 정렬에 사용하지 않는다.
정렬에는 나이순->입력순서만 사용하는데,
코딩 기초 부족 티 팍팍 남. . ...
string의 경우 일단 그대로 scanf는 불가.
scanf("%s",str.c_str());
억지로 하려면 이런 모양새로 할 수 있긴 한 것 같은데, 절대 추천하지 않는다고.
char배열로 받아와서 string으로 복사해넣는 수밖에 없다.
아니면 getline이나 cin쓰던가.
printf는 위 c_str()함수로 해결 가능하다.
그리고.... class를 sort하려고 하니 사용자 정의 함수를 이용한 방법이 있었다
들어오는 순서대로 index를 넣어서, age가 같으면 index로 비교하여 출력하게끔 해봤다
첫 코드
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
class Member
{
public:
int age;
int index;
string name;
Member(int index, int age, char* name) :index(index), age(age), name(name) {}
};
bool compare(Member a, Member b)
{
if (a.age == b.age)
{
return a.index < b.index;
}
else
{
return a.age < b.age;
}
}
int main()
{
int cnt, age;
char name[100];
scanf("%d", &cnt);
vector<Member> members;
for (int i = 0; i < cnt; ++i)
{
scanf("%d", &age);
scanf("%s", name);
members.push_back(Member(i, age, name));
}
sort(members.begin(), members.end(), compare);
for (int i = 0; i < cnt; ++i)
{
printf("%d %s\n", members[i].age, members[i].name.c_str());
}
}
근데 막상 정답 받고 나니까 너무 비효율적이고 ㅠ
입력값이 좀 더 많은 경우에는 쓸만하겠다만 고작 age랑 name 두개 들어오는데 index까지 추가해서 이난리를 치고 있는게 과연 합당한가 하는 생각이 들어 다른 사람들의 코드를 확인했는데,, ,,,
나이별로 vector를 생성하여 그냥 집어넣으면 sort고 뭐고 아무것도 필요없었다
띠바
혹은 뭐... fifo로 queue를 써도 나쁘진 않을 것 같음
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> members[201];
int cnt, age;
char name[100];
scanf("%d", &cnt);
for (int i = 0; i < cnt; ++i)
{
scanf("%d", &age);
scanf("%s", name);
members[age].push_back(name);
}
for (int i = 1; i < 201; ++i)
{
if (!members[i].empty())
{
for (int j = 0; j < members[i].size(); ++j)
{
printf("%d %s\n", i, members[i][j].c_str());
}
}
}
}
뭐 무튼 공부한 이후로 처음 class를 사용해봤다는데 의의를 두자
(훌쩍)
'Study > 프로그래밍 문제풀이' 카테고리의 다른 글
C++) 백준 1260번 풀이_DFS와 BFS (0) | 2020.02.19 |
---|---|
C++) 백준 10799번 풀이_쇠막대기 (0) | 2019.11.19 |
C++) 프로그래머스 풀이_기둥과 보 설치 (0) | 2019.10.27 |
C++) 프로그래머스 풀이_N-Queen (0) | 2019.10.27 |
C) 프로그래머스 풀이_자연수 뒤집어 배열로 만들기 (0) | 2019.10.26 |