8월 3주차 과제 : 문제 3_삼각형의 완성조건(1)

2023. 8. 16. 18:04Algorithm ( 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++를 공부할 수 있도록 잘 준비해야할 것 같다. 😂