문제설명
입체기동장치 생산공장에서는 거인들을 물리치기 위한 기계가 생산되고 있습니다.
이 공장을 운영하는 에렌은 입체기동장치(1~100)의 식별번호(1~100)와 가스 보유량(0~10000)을 같이 관리하려고 합니다.
하지만, 식별번호를 정렬할 때 가스 보유량이 뒤죽박죽 되어 버려 골머리를 앓고 있습니다.
에렌을 남몰래 좋아하고 있던 미카사는 에렌이 스트레스성 탈모로 잔머리가 모두 빠지기 전에 이 문제를 해결해주려 합니다.
미카사가 에렌의 스트레스성 탈모를 막을 수 있도록 프로그램을 작성해세요.
식별번호가 한번 정해지면 그 입체기동장치의 가스 보유량은 정렬되더라도 변하지 않아야 합니다.
입력
첫째 줄에 입체기동장치의 갯수 n이 입력된다. (1 <= n <= 100)
둘째 줄부터 n+1째 줄까지 각 줄에 입체기동장치의 식별번호 a와 가스 보유량 b가 주어진다.
a는 중복 될 수 없지만 b는 중복될 수 있다. (1 <= a <= 100), (0 <= b <= 10,000)
출력
첫째 줄부터 n번째 줄까지 각 줄에 식별번호를 오름차순으로 정렬해 가스 보유량과 같이 출력한다.
입력예시
3
2 10
3 20
1 30
출력예시
1 30
2 10
3 20
#include <stdio.h>
int main(void){
int n;
int a[101],b[10001];
int temp;
scanf("%d", &n);
for(int i=0;i<n;i++){
scanf("%d %d",&a[i],&b[i]);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
for(int i=0;i<n;i++){
printf("%d %d \n", a[i],b[i]);
}
return 0;
}
처음에는 구조체 문제라고 해서 struct를 써야 되나 해서 굉장히 고민이 많았던 문제였다. 찾아보니 그건 아니여서 기존에 풀던 방식을 유지했다. 아직 헷갈리는게 비교하는 과정에서 for문 중첩이 가장 안 익숙해지는 것 같긴하다. 원리를 이해 못한듯하다. 안에서 옮겨주고 또한번 더 검사를 해서 그런지 몰라도 확신은 들지 않지만 이 방법이 낫기에 따라가는중... temp로 값 만들어주는 것은 어렵지 않다. 여기서는 두값을 동시에 옮겨야 하므로 if문 안에서는 a만 확인하고 바꾸는 것은 a와 b 각각 옮겨주면된다. 출력은 어렵지 않으니까.......
반환도 해주고......
'C language > Codeup' 카테고리의 다른 글
[C] 코드업 문제풀이 1069: 평가 입력받아 다르게 출력하기 (0) | 2021.08.20 |
---|---|
[C] 코드업 문제풀이 3004: 데이터 재정렬 (0) | 2021.08.19 |
[C] 코드업 문제풀이 1535:함수로 가장 큰 값 위치 리턴하기 (0) | 2021.08.19 |
[C] 코드업 문제풀이 1420: 3등찾기 (0) | 2021.08.18 |
[C] 코드업 문제풀이 1172: 세수 정렬하기 (0) | 2021.08.18 |