-
*프로그래머스 알고리즘 문제 입문
알고리즘 문제 해설 | 프로그래머스 (programmers.co.kr)
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
제한사항
- v는 세 점의 좌표가 들어있는 2차원 배열입니다.
- v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
- 좌표값은 1 이상 10억 이하의 자연수입니다.
- 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.
입출력 예 #1
세 점이 [1, 4], [3, 4], [3, 10] 위치에 있을 때, [1, 10]에 점이 위치하면 직사각형이 됩니다.입출력 예 #2
세 점이 [1, 1], [2, 2], [1, 2] 위치에 있을 때, [2, 1]에 점이 위치하면 직사각형이 됩니다.
평행한 사각형을 [1,1] [1,2] [2,1] [2,2] 라고 가정하였을 때,
각 좌표에서 나오는 값은 각각 2번 나오게 된다. (= 평행하므로) 짝수 갯수로 이루어짐을 알면 된다.
하나의 점 [1,2]를 모른다고 가정하였을 때, [1,1] [2,1] [2,2] 가 주어진 값 이다.
이를 X 좌표와 Y좌표를 구분하여 배열에 저장, X좌표 배열에는 [1,2,2]를 Y좌표 배열에는 [1,1,2]가 저장이 된다.
즉 여기서 XOR을 사용하여 동일한 값이 입력되면 없어지게 하면 되는데, 이 경우 X좌표 배열에는 1이 [1
,2,2]Y좌표 배열에는 2가 남게 된다. [
1,1,2] 이를 좌표로 출력하면, [1,2] 이라는 나머지 한 점을 출력할 수 있다.#include <iostream> #include <vector> using namespace std; vector<int> solution(vector<vector<int> > v) { vector<int> ans; cout << "Hello Cpp" << endl; return ans; }
기본적인 틀로 백터가 제시되었으므로,
vector<int> ans = {0,0};
값을 0,0 으로 초기화를 해놓는다.
for(int i =0; i<3; i++){ ans[0] ^= v[i][0]; ans[1] ^= v[i][1]; }
문제에 맞추어, 점은 3개의 점이 주어지게 되었으므로 3번을 반복할 수 있도록 하여 XOR 실행.
그 후 테스트 실행하면 된다.
'개발 > 알고리즘' 카테고리의 다른 글
알고리즘_ 순열 검사, n의 배열에 중복 값 확인. (0) 2021.10.08 알고리즘_ 자릿 수 더하기 (0) 2021.10.08 [백준/BOJ] JAVA_1330번 숫자 비교 하기 (자바) (0) 2021.07.29 [백준/BOJ] JAVA_2588번 곱셉 과정 출력하기 (자바) (0) 2021.07.27 [백준/BOJ] JAVA_10430번 복합연산 출력하기 (자바) (0) 2021.07.27 댓글 (비로그인 댓글 허용하지 않습니다.)