Notice
Recent Posts
Recent Comments
Link
혜지와 콩나무
[C++] 일반 정렬 문제 / bool 함수 이용해 세련된 코드로 본문
문제는 다음과 같다.
이 문제에 대하여 나는 다음과 같이 풀이했다.
#include<iostream>
#include<algorithm>
using namespace std;
//수열의 최대 크기
#define MAX_PROG 100
int main(){
int PROG_A[MAX_PROG];
int PROG_B[MAX_PROG];
int n;
cin>>n;
//A배열 채우기
for(int i = 0; i<n; i++){
cin>>PROG_A[i];
}
//A배열 오름차순 정렬하기
sort(PROG_A, PROG_A+n);
//B배열 채우기
for(int i = 0; i<n; i++){
cin>>PROG_B[i];
}
//B배열 오름차순 정렬하기
sort(PROG_B, PROG_B+n);
//A, B배열 비교하기
for(int i = 0; i<n; i++){
//순서대로 비교하다가 다르면 No 출력하고 빠져나오기
if(PROG_A[i]!=PROG_B[i]){
cout<<"No";
break;
}
//i가 n-1번째인 때에 도달하게 되면 Yes 출력하고 빠져나오기
if(i==n-1){
cout<<"Yes";
break;
}
}
return 0;
}
답은 맞지만 뭔가 조잡하게(?) 풀이한 기분이 들어서 해설을 보았다.
#include <iostream>
#include <algorithm>
#define MAX_N 100
using namespace std;
int n;
int a[MAX_N], b[MAX_N];
bool Equal() {
// n개의 원소를 순서대로 봤을 때
// 전부 동일한 경우에만 일치합니다.
// 단 하나라도 다르다면, false입니다.
for(int i = 0; i < n; i++)
if(a[i] != b[i])
return false;
return true;
}
int main() {
// 입력
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int i = 0; i < n; i++)
cin >> b[i];
// 정렬
sort(a, a + n);
sort(b, b + n);
// 수열이 일치하는지 확인합니다.
if(Equal())
printf("Yes");
else
printf("No");
return 0;
}
여기에서 나와 중요하게 다른 점은, bool 자료형 함수를 사용했다는 점이다.
함수를 이용하니 훨씬 깔끔한 코드가 완성된 것을 알 수 있다.
이 함수는 아래의 작동 과정을 거친다.
- 함수는 정수 n을 기준으로 a와 b 배열의 원소를 비교한다.
- for 루프를 사용하여 배열의 모든 인덱스 i에 대해 a[i]와 b[i]의 값을 비교한다.
- 만약 a[i]와 b[i]가 서로 다르면, 배열이 동일하지 않으므로 false를 반환한다.
- 모든 원소를 비교한 후에도 다름이 발견되지 않으면, 배열이 동일하다는 의미이므로 true를 반환한다.
main 내부에서는, bool 함수와 관련하여
- if (Equal()): Equal() 함수가 true를 반환하면 if 블록이 실행된다.
- else: Equal() 함수가 false를 반환하면 else 블록이 실행된다.
위의 과정을 거친다.
따라서 좀 더 세련된 방식으로 코드를 구현할 수 있다.
코드를 블록 형태로 구상하는 습관을 들여야겠다.
'Programming > C++' 카테고리의 다른 글
[C++] 별표 출력하기_250103 (1) | 2025.01.04 |
---|---|
[C++] 반복문 학습 & 별표 출력하기_250101 (1) | 2025.01.02 |
[C++] 일반 정렬 문제 / 배열 선언 시 주의할 점 (0) | 2024.09.15 |
[코드트리 조별과제] 3주차 레포트 (1) | 2024.08.04 |
[코드트리 조별과제] 2주차 레포트 (1) | 2024.07.27 |