KoreanFoodie's Study
SW 역량테스트 - [모의 SW 역량테스트] 활주로 건설 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [모의 SW 역량테스트] 활주로 건설 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 9. 29. 11:41
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH
해답 코드 :
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int N, X;
int map[20][20];
int num_road;
bool isRange(int x) {
if (x < 0 || x >= N) {
return false;
}
else return true;
}
// change x-y coordinates to reuse build function
void shuffle() {
int temp;
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
temp = map[i][j];
map[i][j] = map[j][i];
map[j][i] = temp;
}
}
}
void build() {
// first, check row
int series;
int height;
// to check if there is already a slope
for (int i = 0; i < N; i++) {
int temp = num_road;
series = 1;
height = map[i][0];
bool isRoad = true;
for (int j = 1; j < N; j++) {
if (map[i][j] == height) {
series++;
continue;
} else {
// if going up
if (height - map[i][j] == -1) {
if (series >= X) {
series = 1;
height = map[i][j];
continue;
}
else {
isRoad = false;
break;
}
} // if going down
else if (height - map[i][j] == 1) {
series = 1;
height = map[i][j];
for (int k = j; k < N-1; k++) {
if (map[i][k] == map[i][k + 1]) {
series++;
} else { break; }
} // build a slope
if (series >= X) {
series = -1 * X + 1;
continue;
}
else {
isRoad = false;
break;
}
} // height difference is lager than 1
else if (abs(height - map[i][j]) > 1){
isRoad = false;
break;
}
}
}
if (isRoad) num_road++;
}
}
int main(int argc, char** argv)
{
int test_case;
int T;
/*
아래의 freopen 함수는 input.txt 를 read only 형식으로 연 후,
앞으로 표준 입력(키보드) 대신 input.txt 파일로부터 읽어오겠다는 의미의 코드입니다.
//여러분이 작성한 코드를 테스트 할 때, 편의를 위해서 input.txt에 입력을 저장한 후,
freopen 함수를 이용하면 이후 cin 을 수행할 때 표준 입력 대신 파일로부터 입력을 받아올 수 있습니다.
따라서 테스트를 수행할 때에는 아래 주석을 지우고 이 함수를 사용하셔도 좋습니다.
freopen 함수를 사용하기 위해서는 #include <cstdio>, 혹은 #include <stdio.h> 가 필요합니다.
단, 채점을 위해 코드를 제출하실 때에는 반드시 freopen 함수를 지우거나 주석 처리 하셔야 합니다.
*/
//FILE *fp;
//freopen_s(&fp, "sample_input.txt", "r", stdin);
cin >> T;
/*
여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for (test_case = 1; test_case <= T; ++test_case)
{
cin >> N >> X;
/*
if (test_case == 6) {
num_road = test_case;
}
*/
num_road = 0;
for (int i = 0; i < N; i ++) {
for (int j = 0; j < N; j++) {
cin >> map[i][j];
}
}
build();
shuffle();
build();
std::cout << "#" << test_case << " " << num_road << "\n";
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 톱니바퀴 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
---|---|
SW 역량테스트 - [모의 SW 역량테스트] 미생물 격리 문제 풀이/해답/코드 (C++ / JAVA) (1) | 2020.09.29 |
SW 역량테스트 - [모의 SW 역량테스트] 점심 식사시간 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
SW 역량테스트 - [백준] 로봇 청소기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
SW 역량테스트 - [백준] 영역 구하기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.09.29 |
Comments