문제
https://school.programmers.co.kr/learn/courses/30/lessons/87377
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. 교점을 구해서 저장한다..
2. 교점의 범위만큼 정답을 초기화 해준다.
3. 수학에서 쓰는 x,y좌표를 컴퓨터에서 쓰는 배열에 맞게 좌표를 조정해주고 교점에 '*'을 넣어준다.
* 정답은 1000*1000크기 이내로 표현된다고 했지만 10000000000 ~ 10000001000 사이에 좌표가 존재할 수도 있기 때문에 교점을 배열의 인덱스를 이용하면 안된다. ex) a[x][y]='*';
* 좌표계에서 x,y좌표를 answer벡터에 옮겼을때 똑같아 보이려면 다음과 같이 해야한다.
1. 원점과 제일 좌측하단에 있는 점을 일치 시킨다. - cross[i][1]-min_y, cross[i][0]-min_x (cross[i][1]에는 y 좌표가 들어있다.)
2. 벡터에 옮길때 y 좌표를 i에 x 좌표를 j에 할당하면 원래 좌표가 x축 대칭이 된 모습이 된다.
answer[cross[i][1]-min_y][cross[i][0]-min_x]
2-1. 좌표중에 제일 큰 y 값과 제일 작은 y값의 차이를 구한다. yy라고 칭한다.
long long yy=max_y-min_y;
3. i에 yy-i 를 넣는다. answer 벡터를 출력하면 y값이 증가할수록 아래로 찍히기 때문이다.
answer[yy-(cross[i][1]-min_y)][cross[i][0]-min_x]
* int가 아니라 long long을 사용해줘야한다.
* 최솟값, 최댓값 초기화를 int보다 훨씬 크게 설정해줘야한다.

#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<vector<long long>>cross;
long long a,b,e,c,d,f;
long long x,y;
long long max_x=-90000000000,min_x=90000000000,max_y=-90000000000,min_y=90000000000;
vector<string> solution(vector<vector<int>> line) {
vector<string> answer;
//교점 구하기
int line_size= line.size();
for(int i=0;i<line_size;i++){
for(int j=i+1;j<line_size;j++){
//두 직선 사이의 교점 구하면 vector에 저장
a=line[i][0];
b=line[i][1];
e=line[i][2];
c=line[j][0];
d=line[j][1];
f=line[j][2];
//평행하거나 일치하면 continue
if((a*d-b*c)==0)
continue;
x=(b*f-e*d)/(a*d-b*c);
y=(e*c-a*f)/(a*d-b*c);
if((b*f-e*d)%(a*d-b*c)!=0)
continue;
if((e*c-a*f)%(a*d-b*c)!=0)
continue;
if(x>max_x)
max_x=x;
if(x<min_x)
min_x=x;
if(y>max_y)
max_y=y;
if(y<min_y)
min_y=y;
vector<long long> temp;
temp.push_back(x);
temp.push_back(y);
cross.push_back(temp);
}
}
string tmp="";
for(long long i=0;i<=max_y-min_y;i++){
tmp="";
for(long long j=0;j<=max_x-min_x;j++){
tmp+='.';
}
answer.push_back(tmp);
}
long long yy=max_y-min_y;
long long xx=max_x-min_x;
for(long long i=0;i<cross.size();i++){
answer[yy-(cross[i][1]-min_y)][cross[i][0]-min_x]='*';
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정수삼각형 c++ (0) | 2023.11.06 |
---|---|
[프로그래머스] 타겟넘버 c++ (0) | 2023.09.28 |
[프로그래머스] 대충 만든 자판 c++ (0) | 2023.09.26 |
[프로그래머스] 소수 만들기 c++ (0) | 2023.09.26 |
[프로그래머스] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기 (0) | 2023.09.21 |