일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- h4ckinggame
- 디포전 2급
- 세마포어
- malware
- 디지털 포렌식 전문가 2급
- 디지털 포렌식 트랙
- 정보보안기사
- DLL 사이드로딩
- race condition
- 정보기
- 프로그래머스
- Best of the Best
- 리버싱
- dll side-loading
- cve-2022-26923
- Active Directory
- 코드엔진
- 논문리뷰
- cve-2024-6387
- BoB 12기 최종합격 후기
- bob
- BoB 12기
- CodeEngn
- 필기
- 디포전
- 뮤텍스
Archives
- Today
- Total
SEO
[백준/C언어] 직각삼각형_4153번_nabi 본문
반응형
학습 내용
pow 함수
- 사용 방법
pow(double base, double n) : base의 n승
- 주의 사항
#include <math.h> 헤더파일을 선언해준 후 pow 함수 호출
sqrt 함수
- 사용 방법
sqrt(double x) : x의 제곱근
- 주의 사항
#include <math.h> 헤더파일을 선언해준 후 sqrt 함수 호출
처음에는 a,b,c 변수를 선언하여 각각 변의 길이를 할당하려고 했었다. 이 방법이 불가능 한 것은 아니지만 if문으로 하나 하나 판별 후 변수 할당이 필요해 코드가 쓸데없이 길어질 것 같았다.
따라서 배열을 선언해 오름차순 정렬 방식을 사용했다.
1차 실패 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define L 3
int arr[L];
int* input();
int* sort(int *arr);
char* cal(int *arr);
int main() {
int i,number;
char* string;
while (1) {
int* numPtr = input();
if (*numPtr == 0 && *(numPtr+1) == 0 && *(numPtr+2) == 0)
break;
number = sort(*numPtr);
string = cal(*numPtr);
printf("%s\n", string);
}
return 0;
}
int* input() {
int i;
for (i = 0; i < L; i++)
scanf("%d", &arr[i]);
return arr;
}
int* sort(int *arr) {
int res,i,j;
for (i = 0; i < L-1; i++) {
for (j = 1; j < L; j++) {
if (*(arr+i) < *(arr+j)) {
res = *(arr + i);
*(arr + i) = *(arr + j);
*(arr + j) = res;
}
}
}
return *arr;
}
char *cal(int *arr) {
double res;
char r = "right", w = "wrong";
res = pow((double)*(arr+1), 2) + pow((double)*(arr+2), 2);
res = sqrt((double)res);
if (*arr == res)
return r;
else
return w;
}
각 기능들을 함수로 구현해 호출하고 싶었다. 하지만 포인터에 대한 이해가 부족한 탓에 런타임 에러가 발생했다.
2차 실패 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define L 3
void sort(int* arr[], int size);
int main() {
int arr[L],i,number;
char* string;
while (1) {
for (i = 0; i < L; i++)
scanf("%d", &arr[i]);
if (arr[0] == 0 && arr[1] == 0 && arr[2] == 0)
break;
sort(arr,L);
}
return 0;
}
void sort(int *arr[], int size) {
int res,i,j;
for (i = 0; i < size-1; i++) {
for (j = i+1; j < size; j++) {
if (*arr[i] < *arr[j]) {
res = *arr[i];
*arr[i] = *arr[j];
*arr[j] = res;
}
}
}
double cal;
cal = pow((double)*arr[1], 2) + pow((double)*arr[2], 2);
cal = sqrt((double)cal);
if (*arr[0] == cal)
printf("right\n");
else
printf("wrong\n");
}
입력의 문제인가하고 1차 실행 코드의 정렬 함수와 계산 함수를 합쳐 하나의 함수로 만들고 출력까지 구현했다. 하지만 이 코드도 포인터 주소를 잘못 할당해 런타임 에러가 발생했다.
3차 실행 코드(백준 실행 성공)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define L 3
void sort(int arr[], int size);
int main() {
int arr[L],i,number;
while (1) {
for (i = 0; i < L; i++)
scanf("%d", &arr[i]);
if (arr[0] == 0 && arr[1] == 0 && arr[2] == 0)
break;
sort(arr,L);
}
return 0;
}
void sort(int a[], int size) {
int res,i,j;
for (i = 0; i < size-1; i++) {
for (j = i+1; j < size; j++) {
if (a[i] < a[j]) {
res = a[i];
a[i] = a[j];
a[j] = res;
}
}
}
double cal;
cal = pow((double)a[1], 2) + pow((double)a[2], 2);
cal = sqrt((double)cal);
if (a[0] == cal)
printf("right\n");
else
printf("wrong\n");
}
결국 배열과 함수만으로 구현했다.. 포인터 사용에 익숙해지고 싶었지만 이론 공부가 부족했던 것 같다. 정확히는 포인터에 대해 완벽히 이해하지 못한 것 같다.
모각코에서도 최근 포인터 관련 문제를 몇 개 풀었는데 좀처럼 사용에 익숙해지지 않는 것 같다. 다시 책을 읽어볼 필요가 있다.
반응형
'코딩테스트 > 문제 풀이' 카테고리의 다른 글
[백준/C언어] 재귀함수가 뭔가요?_17478번_nabi (0) | 2022.02.20 |
---|---|
[백준/C언어] 별 찍기-9_2446번_nabi (0) | 2022.01.23 |
[백준/C언어] 스택_10828번_nabi (0) | 2022.01.13 |
[백준/C언어] 정수론 및 조합론_3036번_nabi (0) | 2021.11.08 |
[백준/C언어] 정렬_2750번_nabi (0) | 2021.10.28 |