3009번: 네 번째 점
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
www.acmicpc.net

#include <iostream>
int main(){
int arr[4][2];
for(int i=0; i<3; i++){
for(int j=0; j<2; j++){
std::cin >> arr[i][j];
}
}
if(arr[0][0] == arr[1][0]) //x좌표
arr[3][0] = arr[2][0];
else if(arr[0][0] == arr[2][0])
arr[3][0] = arr[1][0];
else
arr[3][0] = arr[0][0];
if(arr[0][1] == arr[1][1]) //y좌표
arr[3][1] = arr[2][1];
else if(arr[0][1] == arr[2][1])
arr[3][1] = arr[1][1];
else
arr[3][1] = arr[0][1];
std::cout << arr[3][0] << " " << arr[3][1];
}
배열로 풀어봤다. 두 점 씩 x 좌표 수가 같다는 점을 이용해서 풀었다.
15894번: 수학은 체육과목 입니다
성원이는 수학을 정말 못 하는 고등학생이다. 수학을 못하는 대신 근성과 팔 힘이 뛰어난 성원이는 수학 시험에서 수학 지식을 사용하지 않고 근성과 체력을 사용해 문제를 푼다. 지난 시험에서
www.acmicpc.net


가장 아랫부분의 정사각형 개수 n은 총 줄의 개수와 같고, 실선으로 이루어진 도형의 둘레 길이는 맨 아랫줄의 도형 둘레와 같다. 간단하게 4n이다.
처음에 틀린 이유는 int n으로 초기화해서. long long n으로 초기화하고 맞았다.
#include <iostream>
int main(){
long long n;
std::cin >> n;
std::cout << 4*n;
return 0;
}
9063번: 대지
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
www.acmicpc.net

가장 가장자리의 x, y좌표들을 알면 구할 수 있다.
#include <iostream>
int main(){
int N;
std::cin >> N;
int b[N][2];
std::cin >> b[0][0] >> b[0][1];
int maxX = b[0][0], maxY = b[0][1];
int minX = b[0][0], minY = b[0][1];
for(int i=1; i<N; i++){
for(int j=0; j<2; j++){
std::cin >> b[i][j];
if(j=0 && minX > b[i][j]) minX = b[i][j];
if(j=1 && minY > b[i][j]) minY = b[i][j];
if(j=0 && maxX < b[i][j]) maxX = b[i][j];
if(j=1 && maxY < b[i][j]) maxY = b[i][j];
}
}
std::cout << (maxX-minX) * (maxY-minY);
return 0;
}
첨엔 이렇게 구성했는데, 시간초과가 계속 났다.
#include <iostream>
int main(){
int N;
std::cin >> N;
int b[N][2];
for(int i=0; i<N; i++){
for(int j=0; j<2; j++){
std::cin >> b[i][j]; //좌표 입력
}
}
int maxX = b[0][0], maxY = b[0][1];
int minX = b[0][0], minY = b[0][1]; // max min 초기화
for(int i=0; i<N; i++){
if(maxX < b[i][0])
maxX = b[i][0];
if(minX > b[i][0])
minX = b[i][0];
}
for(int i=0; i<N; i++){
if(maxY < b[i][1])
maxY = b[i][1];
if(minY > b[i][1])
minY = b[i][1];
}
std::cout << (maxX-minX) * (maxY-minY);
return 0;
}
그래서 그냥 아예 따로 비교해줬다.
#include <iostream>
int main(){
int N;
std::cin >> N;
int b[N][2];
std::cin >> b[0][0] >> b[0][1];
int maxX = b[0][0], maxY = b[0][1];
int minX = b[0][0], minY = b[0][1];
for(int i=1; i<N; i++){
for(int j=0; j<2; j++){
std::cin >> b[i][j];
if(j==0){
if(minX > b[i][j])
minX = b[i][j];
if(maxX < b[i][j])
maxX = b[i][j];
}
else{
if(minY > b[i][j])
minY = b[i][j];
if(maxY < b[i][j])
maxY = b[i][j];
}
}
}
std::cout << (maxX-minX) * (maxY-minY);
return 0;
}
지금 보니까 논리 연산자가 처리 속도가 느린걸까? for for if 구조로 해도 풀리긴하네..
'프로그래밍 > C++ :: 백준' 카테고리의 다른 글
| [C/C++] 백준 2720 : 세탁소 사장 동혁 / 2903 : 중앙 이동 알고리즘 (0) | 2023.05.12 |
|---|---|
| [C/C++] 백준 1002 : 터렛 / 1010 : 다리 놓기 (0) | 2023.05.11 |
| [C/C++] 백준 2745 : 진법 변환 / 11005 : 진법 변환 2 (0) | 2023.05.09 |
| [C/C++] 백준 27323 : 직사각형 / 1085 : 직사각형에서 탈출 (0) | 2023.04.27 |
| [C/C++] 백준 2444 : 별 찍기 (0) | 2023.04.25 |
| [C/C++] 백준 10798 : 세로읽기 / 2563 : 색종이 (1) | 2023.04.25 |
| [C/C++] 백준 2738 : 행렬 덧셈 / 2566 : 최댓값 (0) | 2023.04.21 |
댓글