2023. 8. 16. 18:04ㆍAlgorithm ( p & swlug )/Programmers
8월 3주차 문제는 다음과 같다.
1. 배열 원소의 길이
2. 아이스 아메리카노
3. 삼각형의 완성조건(1)
마지막 문제이다.
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
이 문제는 선분 세 개로 삼각형을 만들기위한 조건을 완성시키는 문제이다.
"가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야한다."는 조건이 성립해야하는데,
사실 내 코드가 너무 길어서, 내가 보기에는 가독성이 나쁘지않지만 좋은 코드라고 하기에는 너무.. 복잡하고 길 수도 있다는 생각이 든다.
그런데 일단은 내 최선이라 길어도 열심히 코드를 완성시켜보았다.
일단은 가장 긴 변의 길이를 구하기위해서 for 문을 이용해서 최대 값의 길이를 구하도록 코드를 구성했다.
sides[0] 인덱스의 값이 최댓값이라고 가정하고 최댓값보다 다른 인덱스의 값이 크다면 최댓값이 리셋되도록 했고,
if 문을 통해 sides[i]번째값이 최댓값일때 다른 두값의 합이 더 클때와 작을 때로 구분해서 if문으로 경우의 수를 모두 작성했다. 그러다보니 코드가 길어진듯..
이 문제를 풀면서 전체적은 큰 틀은 생각보다 금방 어떤식으로 풀지 구상이 됐지만 세부적으로 여러번 고쳐야했다.
아래 빨간 글씨로 쓰여진 에러들을 몇번씩 고치면서 , 특히나 괄호.. 부분을 많이 놓쳐서 여러번 고쳐줬다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// sides_len은 배열 sides의 길이입니다.
int solution(int sides[], size_t sides_len) {
int answer = 0;
int max ;
int i;
max=sides[0];
for (i=0; i<sides_len; i++)
if (sides[0]<sides[i])
max=sides[i]; //세변중에서 가장 긴 변을 구하기
if(sides[0]==max){
if (sides[1]+sides[2]>sides[0])
{
answer=1;
}
else
{
answer=2;
}
}
else if(sides[1]==max)
{
if (sides[0]+sides[2]>sides[1])
{
answer=1;
}
else
{
answer=2;
}
}
else if(sides[2]==max){
if (sides[1]+sides[0]>sides[2])
{
answer=1;
}
else{
answer=2;
}
}
return answer;
}
int main()
{
solution((int[]){1,2,3},3);
}
그렇게 완성된 코드 ! 너무 길어서 캡쳐는 코드 전체가 보이게 불가능해서 또 코드 블럭을 이용했다.(^///^)
정답입니다.!
방학을 이용한 c언어 알고리즘과제는 내가 어디가 부족한지 지속적으로 확인할 수 있는 좋은 기회였다.
방학이 끝나기 전에 부족한 부분을 더 공부해주고 다음학기에 c++를 공부할 수 있도록 잘 준비해야할 것 같다. 😂
'Algorithm ( p & swlug ) > Programmers' 카테고리의 다른 글
1주차_파이썬 과제(n의 배수) (0) | 2024.03.20 |
---|---|
8월 3주차 과제 : 문제 1_배열 원소의 길이 (0) | 2023.08.17 |
8월 3주차 과제 : 문제 2_아이스 아메리카노 (0) | 2023.08.16 |
8월 2주차 과제 : 문제 3_중앙값 구하기 (0) | 2023.08.13 |
8월 2주차 과제 : 문제 2_중복된 숫자개수 (0) | 2023.08.13 |