바킹독 0x02 문제7 - 세수정렬 / 백준 2557번
세수 정렬..
정렬..
사실 이 정렬이라는 거에 큰 힌트를 얻었어야 했는데
그냥 세 숫자를 어떻게 할까 만 고민하다가
결국 답지를 본 문제이다.
문제 푸는 방법은 두 가지라고 한다.
함께 보자
1. for문 따위 쓰지 않는다.
생각해 보니 나쁘지 않은 거 같다.
a , b, c에 숫자를 넣고
d e f를 만들어서
가장 큰 숫자를 d에 넣고
가장 작은 숫자를 f에 넣고
나머지 한 숫자를 그 큰 거와 작은 것을 더해서 전체에서 뺀 값으로 쓰게 된다.
참 신기하다. 똑똑하다.. 천재다!!
여기서 알아야 할 건 max와 min!
이미 지원해 주는 것이기 때문에 자주 공부해서 사용해 보자!
max ( arr ) 은 안된다고 한다.
그래서 배열로 쓸 때는 max_element라고 써야 한다고 한다.
int arr [3] = {a, b, c};
int max_val = *max_element(arr, arr + 3);
앞에 별을 붙여야지만 최댓값 자체를 얻을 수 있다고 한다.
배열에서 가장 중요한 것이 값 자체인지 주소인지 봐야 하기 때문에
신경 써줘야 하는 부분이다.
벡터여도 똑같은 함수를 사용한다.
max와 max_element 두 종류가 있다는 사실을 기억하자!
2. 출력을 위해서 for문을 어쩔 수 없이 쓰자. or 함수를 쓰면 되잖아?
정렬이라는 말에 힌트를 받았어야 했는데 sort라는 친구가 있다.
정돈 후,
출력하세요!
arr부터 arr+3까지 는 0부터 +3칸까지라는 뜻!
3. 지 선생이 그러던데 벡터도 좋대!
vector <int>로 선언
이름은 v이고 (3)은 3개라는 뜻!
백터의 첫 번째를 뜻할 땐
대괄호! []
그래서 v [1] 이렇게 쓴다.
sort에서 쓸 때가 중요한데
배열로 받을 땐 그냥 arr0번부터 arr+3 이렇게 했는데
그 이유는 배열이 포인터이기 때문이라고 한다!
여기는 시작과 끝이라는 또 다른 용어가 존재했다.
v. 하니 바로 뜨더라!
대신 함수? 여서 그런지 괄호를 사용해야 했다.
푸는 방식이 이렇게 많으면,,, 어쩌자고요,,
원래 모든 코테에는 답이 있진 않지만..
참 알다가도 모를 정도로 어렵다.