[C++] 형 변환 연산자 static_cast

멋진감자·2024년 4월 9일
0

알고리즘

목록 보기
10/20
post-thumbnail

최근 시작한 알고리즘 약속 스터디
알고리즘을 풀기로 약속한 스터디이다.

일주일에 최소 네 문제를 풀기로 합의를 봤고 안 풀 시 문제 당 벌금이 2천원!
네 문제 다 풀지 않을 경우 괘씸죄로 만 원의 벌금을 내야한다.
분명 치맥 먹는데 쓸 이 벌금 내가 더 많이 낼 순 없지
기초부터 다져보자

들어가기

프로그래머스의 평행 문제를 풀어보자.
코딩테스트 입문 이긴하지만 나름 정답률 낮은 문제를 골라봤다.

vector<vector<int>> dots 로 주어지는 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성하는 문제다.

네 점 중에 두 점만 선택하면 나머지 두 점이 자연스레 정해지기 때문에 경우의 수가 3개 끝
좌표 범위도 0에서 100으로 쪼만하고 두 점을 이은 선의 기울기가 0이 되는 경우도 없기 때문에,
세 경우에서 기울기 비교 후 return 을 해버리면 되겄다.

여기서 간과한 점은 기울기를 구할 때 그 값을 int 로 저장해버린 것이다.
좌표가 int 라고 했지 기울기가 항상 int 라고 한 적은 없다.
여기서 문제 하나 더
나는 자료형이 기억이 나지 않는다.

찾아보니 float를 쓰라고 그런다.
그래도 여전히 기울기가 int로 return 된다.
더 찾아보자.

static_cast

static_cast는 형 변환 연산자다.

dynamic_cast와 다르게 유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의 포인터 및 참조형 데이터로 뿐만 아니라, 기초 클래스의 포인터 및 참조형 데이터도 유도 클래스의 포인터 및 참조형 데이터로 아무런 조건 없이 형 변환시켜주므로 사용 시 주의하

뒤로 미루기

이 연산자를 쓰지 않고는 자꾸만 시크하게 한 글자만 보여주던 기울가 드디어 소수점을 뱉었다.
갈대같은 녀석
담에 더 알아보자.

코드

#include <string>
#include <vector>

using namespace std;

float getGiool(vector<int> a, vector<int> b) {
    float giool = static_cast<float>(b[0] - a[0]) / (b[1] - a[1]);
    return giool;
}

int solution(vector<vector<int>> dots) {
    if (getGiool(dots[0], dots[1]) == getGiool(dots[2], dots[3])) return 1;
    if (getGiool(dots[0], dots[2]) == getGiool(dots[1], dots[3])) return 1;
    if (getGiool(dots[0], dots[3]) == getGiool(dots[1], dots[2])) return 1;
    
    return 0;
}
profile
난멋져

0개의 댓글