Algorythm/프로그래머스 스쿨 (C 언어)

[C] 프로그래머스 스쿨_7주차 문제 3: 삼각형의 완성 조건 (1)

gapsoo 2023. 8. 20. 12:12

 

 

 


문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

 

삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 3입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

 

입출력 예

sides result
[1, 2, 3] 2
[3, 6, 2] 2
[199, 72, 222] 1

 

입출력 예 설명

입출력 예 #1

  • 가장 큰 변인 3이 나머지 두 변의 합 3과 같으므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

 

입출력 예 #2

  • 가장 큰 변인 6이 나머지 두 변의 합 5보다 크므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

 

입출력 예 #3

  • 가장 큰 변인 222가 나머지 두 변의 합 271보다 작으므로 삼각형을 완성할 수 있습니다. 따라서 1을 return합니다.

 

 

 


[2] 정답 및 해석

 

#.1 정답 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
 
int solution(int sides[], size_t sides_len) {
    int max_side = 0;
    int sum_of_other_sides = 0;
 
    // 가장 긴 변과 나머지 두 변의 길이를 계산합니다.
    for (size_t i = 0; i < sides_len; i++) {
        if (sides[i] > max_side) {
            max_side = sides[i];
        }
        sum_of_other_sides += sides[i];
    }
    sum_of_other_sides -= max_side;
 
    // 가장 긴 변의 길이가 나머지 두 변의 합보다 작다면 삼각형을 만들 수 있습니다.
    if (max_side < sum_of_other_sides) {
        return 1;
    } else {
        return 2;
    }
}
cs

 

#.2 정답 해석


1. 함수 정의:

int solution(int sides[], size_t sides_len)은 세 변의 길이를 받아와서 삼각형을 만들 수 있는지를 판단하는 함수이다. sides 배열은 세 변의 길이를 담고 있고, sides_len은 배열의 길이를 나타낸다.

2. 변수 선언 및 초기화:

max_side 변수는 세 변 중 가장 긴 변의 길이를 저장하고, sum_of_other_sides 변수는 나머지 두 변의 길이의 합을 저장한다.

3. 반복문을 통한 계산:

for 반복문을 사용하여 주어진 세 변의 길이를 순회하면서 가장 긴 변의 길이와 나머지 두 변의 길이의 합을 계산한다.

max_side는 반복문을 통해 각 변의 길이와 비교하여 가장 큰 값을 찾는다.

sum_of_other_sides는 모든 변의 길이를 더해나가면서 가장 긴 변의 길이는 뺀다.

4. 삼각형 판단:

계산한 가장 긴 변의 길이와 나머지 두 변의 길이의 합을 비교하여, 가장 긴 변의 길이가 나머지 두 변의 합보다 작다면 삼각형을 만들 수 있는 조건을 만족한다. 따라서 이 경우에는 함수가 1을 반환한다.

그렇지 않은 경우, 삼각형을 만들 수 없는 조건을 만족하므로 함수가 2를 반환한다.

5. 이 코드에서 사용된 개념:

  • 조건문: if와 else를 사용하여 조건에 따라 코드를 실행한다.
  • 배열: sides 배열은 세 변의 길이를 저장하고, 배열의 각 요소에 접근하여 처리한다.
  • 반복문: for 반복문을 사용하여 배열의 요소를 처리한다.
  • 변수: 변수를 사용하여 중간 결과를 저장하고 계산을 수행한다.
  • 비교 연산: '>' 연산자를 사용하여 변수들의 값을 비교한다.

 

 

 


[3] 느낀 점

 

 

✔️ 조건문 + 반복문 + 비교 연산 을 사용하여 변수 값을 갱신하는 알고리즘을 짜는 부분이 늘 헷갈린다... 여기에 배열 개념까지 더해지니까 더 어렵게 느껴진다.