본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "교점에 별 만들기"

by 시아나 2022. 5. 17.

https://programmers.co.kr/learn/courses/30/lessons/87377

 

코딩테스트 연습 - 교점에 별 만들기

[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, -

programmers.co.kr


#include <string>
#include <vector>
#define NUM 1000000000000000

using namespace std;

vector<string> solution(vector<vector<int>> line) {
    vector<pair<long long, long long>> stars;
    long long minX = NUM, maxX = -NUM, minY = NUM, maxY = -NUM;
    for (int i = 0; i < line.size(); i++) {
        for (int k = i + 1; k < line.size(); k++) {
            long long mod = (long long)line[i][0] * line[k][1] - (long long)line[i][1] * line[k][0];
            if (mod == 0) continue;
            long long bfed = (long long)line[i][1] * line[k][2] - (long long)line[i][2] * line[k][1] ;
            long long ecaf = (long long)line[i][2] * line[k][0] - (long long)line[i][0] * line[k][2];
            if (bfed % mod || ecaf % mod) {
                continue;
            }
            long long x = bfed / mod, y = ecaf / mod;
            stars.push_back({ x,y });
            minX = min(minX, x); minY = min(minY, y);
            maxX = max(maxX, x); maxY = max(maxY, y);
        }
    }
    string row = string(maxX - minX + 1, '.');
    vector<string> answer(maxY - minY + 1, row);
    for (int i = 0; i < stars.size();i++) {
        long long x = stars[i].first, y = stars[i].second;
        answer[abs(y - maxY)][abs(x - minX)] = '*';
    }
    return answer;
}

 

사람들이 왜 안하는지 알겠는 문제..

테스트 케이스 27,28에 자꾸 메모리 초과가 뜨길래 애먼 변수들만 줄이고 있었다.

문제는 min, max 값의 초기값이 너무 작았던 것이다..