Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- C++
- 이런게4문제
- STL
- 문자열
- 삼성SW테스트
- 삼성SW역량테스트
- priority_queue
- Map
- 백트래킹
- Sort
- dp
- 코딩테스트
- 2018
- substr
- KAKAO
- swea
- dfs
- find
- 삼성
- 시뮬레이션
- 모의SW역량테스트
- 레벨3
- 코딩스킬
- 완전탐색
- BFS
- Set
- 레벨2
- 백준
- 브루트포스
- 프로그래머스
Archives
- Today
- Total
-
[삼성SW테스트] 백준 17140번 - 이차원 배열과 연산 본문
https://www.acmicpc.net/problem/17140
17140번: 이차원 배열과 연산
첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.
www.acmicpc.net
삼성 SW역량테스트 기출문제로 시뮬레이션 유형의 코딩 문제였다.
이런 문제는 다른 유형과 같이 문제를 제대로 이해하고 문제가 요구하는 조건 그대로 정확히 코딩하는 것이 중요하다.
벡터와 소팅을 활용해 문제를 풀었다.
회고: 벡터 범위 벗어나는 실수를 조심하자.
머리속으로 배열 최대 범위를 짐작해서 어떤 수가 최대 몇 개 존재할 수 있는지 생각하고 코딩했다.
(행/열 최대 100길이니까 1이 100개 -> 소팅 시 100, 1, ...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#include <iostream>
#include <vector>
#include <algorithm>
#define maxlen 100
using namespace std;
int A[100][100];
int r, c, k;
int row = 3, col = 3;
int main(){
cin >> r >> c >> k;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++)
cin >> A[i][j];
}
if (A[r - 1][c - 1] == k){
cout << 0 << '\n';
return 0;
}
int time = 0;
while (1){
if (time > 100){
cout << -1 << '\n';
break;
}
time++;
if (row >= col){
// 모든행 작업
int changeNum = 0;
for (int i = 0; i < row; i++){
vector<pair<int, int> > v;
int howMany[100 + 1];
for (int j = 0; j < 101; j++)
howMany[j] = 0;
for (int j = 0; j < col; j++){
howMany[A[i][j]]++;
}
for (int j = 1; j < 101; j++){
if (howMany[j])
v.push_back(make_pair(howMany[j], j));
}
sort(v.begin(), v.end());
int temp = 0;
for (int j = 0; j < 100; j++)
A[i][j] = 0;
if (v.size() <= 50){
for (int j = 0; j < v.size(); j++){
A[i][temp] = v[j].second;
temp++;
A[i][temp] = v[j].first;
temp++;
}
}
else{
for (int j = 0; j < 50; j++){
A[i][temp] = v[j].second;
temp++;
A[i][temp] = v[j].first;
temp++;
}
}
changeNum = max(temp, changeNum);
}
col = changeNum;
}
else{
int changeNum = 0;
for (int i = 0; i < col; i++){
// 모든열 작업
vector<pair<int, int> > v;
int howMany[100 + 1];
for (int j = 0; j < 101; j++){
howMany[j] = 0;
}
for (int r = 0; r < row; r++){
howMany[A[r][i]]++;
}
for (int j = 1; j < 101; j++){
if (howMany[j])
v.push_back(make_pair(howMany[j], j));
}
sort(v.begin(), v.end());
for (int r = 0; r < 100; r++){
A[r][i] = 0;
}
int temp = 0;
if (v.size() <= 50){
for (int r = 0; r < v.size(); r++){
A[temp++][i] = v[r].second;
A[temp++][i] = v[r].first;
}
}
else{
for (int r = 0; r < 50; r++){
A[temp++][i] = v[r].second;
A[temp++][i] = v[r].first;
}
}
changeNum = max(changeNum, temp);
}
row = changeNum;
}
if (A[r - 1][c - 1] == k){
cout << time << '\n';
break;
}
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'1-1. 삼성 SW 테스트' 카테고리의 다른 글
[삼성SW테스트] 백준 16235번 - 나무 재테크 (시뮬레이션) (0) | 2020.01.02 |
---|---|
[삼성SW테스트] 백준 16236번 - 아기 상어(w/ 우선순위 큐) (0) | 2020.01.01 |
[삼성SW테스트] 백준 17144번 - 미세먼지 안녕! (0) | 2019.12.30 |
[삼성SW테스트] 백준 17143번 - 낚시왕 (0) | 2019.12.29 |
[삼성SW테스트] 백준 17142번 연구소 3 (0) | 2019.12.25 |
Comments