Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 유니티
- 백준 2225번 c++
- 백준 10799번 c++
- 프로그래머스 단체사진 찍기 C++
- 1699번
- transform.position
- 2644번
- TOPCIT 후기
- 풀이
- 프로그래머스 가장 큰 수 C++
- long int 의 차이
- 코드
- 차이
- c++
- 백준 17299번 c++
- 플레이어 이동
- 백준 2193번 c++
- 유니티 Rigidbody 이동
- 백준 11726번 C++
- UML Diagram 정리
- bfs
- 백준
- 로블록스 script local script 차이
- 백준 10844번 c++
- rigidbody.Moveposition
- rigidbody.position
- TOPCIT 문제 유형
- 유니티 LTS
- 배열 stack overflow
- 유니티 꿀팁
Archives
- Today
- Total
Kiki Devlog
[7568번][실5] 덩치 본문
728x90
이 문제를,,,괜히 deque를 사용해서 풀려는 오기를 부리다가 몇시간을 날렸다. tc는 모두 통과되고 반례유명 예시들도 통과했는데 왜 틀렸다고 나오는지 모르겠어서 어제 잠자고, 오늘 다시 처음부터 쉬운방법으로 코딩했다ㅠ
브루트 포스 문제는 심플하게 하나씩 다 뒤져보는게 베스트인 걸로..
내 코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
int weight;
int height;
int personNum;
vector<int> rankAry;
vector<pair<int, int >> personAry;
cin >> personNum;
/*사람 정보 입력받기*/
for (int i = 0; i < personNum; i++) {
cin >> weight >> height;
personAry.push_back(make_pair(weight, height));
rankAry.push_back(1);
}
/*브루트 포스로 등수 비교*/
for (int i = 0; i < personNum; i++) {
for (int j = i+1; j < personNum; j++) {
if (personAry[i].first > personAry[j].first) {
if (personAry[i].second > personAry[j].second) {
rankAry[j]++;
}
}
else if (personAry[i].first < personAry[j].first) {
if (personAry[i].second < personAry[j].second) {
rankAry[i]++;
}
}
}
}
/*정답 출력*/
for (int i = 0; i < rankAry.size(); i++) {
cout << rankAry[i]<< " ";
}
return 0;
}
왜 틀린지 모르겠는 어제 코드,,,,
더보기
(왜틀렸는지 너무 알아내고 싶어서 나중에 다시 볼거임)
#include <iostream>
#include <deque>
using namespace std;
typedef pair<int, int> Person;//한 사람의 정보
deque <pair<int, Person>> rankAry; //한 등수에 여러명 담을 수 있는 등수 배열
/* 새 사람보다 낮은 등수의 사람들을 한등수씩 뒤로 미룸 */
void MinusRank(int newPersonRank) {
for (int i = 0; i < rankAry.size(); i++) {
if (rankAry[i].first >= newPersonRank) {
rankAry[i].first++;
}
}
}
int main() {
int weight;
int height;
int personNum;
bool isSerchingUp = false;
bool isSerchingDown = false;
cin >> personNum;
for (int i = 0; i < personNum; i++) {
cin >> weight >> height;
Person newPerson;
newPerson = make_pair(weight, height);
if (rankAry.size() == 0) {
rankAry.push_back({ 1, newPerson });//{weight, height} // make_pair(값1, 값2)
continue;
}
for (int j = 0; j < rankAry.size(); j++) {
Person personInfo = rankAry[j].second;
int personRank = rankAry[j].first;
if (weight > personInfo.first) { //몸무게 큼
if (height > personInfo.second) {
if ((personRank == 1)|| isSerchingDown) {//1등이라면
MinusRank(personRank);
rankAry.push_back({ personRank ,newPerson });
break;
}
//비교대상이 1등이 아니면 for 문 더 반복해서 올라갈 수 있는 최대 등수를 찾기.
}
else { //등수 같음
MinusRank(personRank + 1);
rankAry.push_back({ personRank, newPerson });
break;
}
isSerchingUp = true;
}
else if (weight == personInfo.first) { //몸무게 같음(=등수 같음)
MinusRank(personRank + 1);
rankAry.push_back({ personRank, newPerson });
break;
}
else {//몸무게 작음
if (height >= personInfo.second) {//등수 같음
MinusRank(rankAry[j].first + 1);
rankAry.push_back({ personRank ,newPerson });
break;
}
else if ((j == (rankAry.size() - 1)) || isSerchingUp){//꼴지라면
rankAry.push_back({ rankAry.size() + 1, newPerson });
break;
}
isSerchingDown = true;
//더 낮은 등수면 for문 더 돌면서 보기.
}
}
isSerchingDown = false;
isSerchingUp = false;
}
for (int k = 0; k < rankAry.size(); k++) {
cout << rankAry[k].first << " ";
}
return 0;
}
'Coding Test > 백준' 카테고리의 다른 글
[10989번][실5] 수 정렬하기 3 (카운팅 정렬) (0) | 2022.03.06 |
---|---|
[2750번][브1] 수 정렬하기 (0) | 2022.03.05 |
[1018번][실5] 체스판 다시 칠하기 (0) | 2022.03.05 |
[10872번][브3] 팩토리얼 (재귀함수) (0) | 2022.03.04 |
[2869번] 달팽이는 올라가고 싶다 (0) | 2022.03.03 |
Comments