250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준#boj#16932#모양만들기
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#boj#12755
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#1939#중량제한
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#2615#오목
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 1022] 소용돌이 예쁘게 출력하기 본문
문제 : 회전하는 배열을 주어진 범위에 맞게 예쁘게 출력해라
해설 : 다른 분들보면 어떻게 공식을 도출해서 풀었던데 난 모르겠음;;;; 그래서 그냥 노가다로 품.
노가다로 푸는 방법도 효율적이게 문제에 접근해야 된다.
단순히 10000x10000 배열을 잡고 수들을 채우고 범위에 맞는 수들을 출력하게끔 하면 되겠지!!!라고 생각하면 안된다.
이유는 제한 메모리는 128MB 바이트인데 10000x10000 배열을 잡으면 범위를 넘어서기 때문....
그러면 어떻게 해야되는 건가?
- 0<=r2-r1<=49
- 0<=c2-c1<=5
이 조건을 이용하면 된다.
방법은 이렇다. (0,0) 부터 배열을 돌린다. 그러면 조건에 맞는 범위에 해당하는 수가 나올 것이다. 그럼 이 수를 답으로 도출할 배열에 대입해준다. 그리고 출력하면 된다.
#include<bits/stdc++.h>
using namespace std;
int Max = -1;
int board[50][5];
vector<int> v;
int cal(int x);
void solve();
void go(int r1, int c1, int r2, int c2);
int main()
{
solve();
}
void solve()
{
int r1, c1, r2, c2;
cin >> r1 >> c1 >> r2 >> c2;
go(r1, c1, r2, c2);
int len = cal(Max);
for (int i = 0; i < abs(r1 - r2) + 1; i++) {
for (int j = 0; j < abs(c1 - c2) + 1; j++)
{
int ret = cal(board[i][j]);
for (int k = 0; k < len - ret; k++)
cout << " ";
cout << board[i][j] << " ";
}
cout << "\n";
}
}
int cal(int x)
{
int ret = 0;
while (x > 0) {
ret++;
x /= 10;
}
return ret;
}
void go(int r1, int c1, int r2, int c2)
{
int dx[] = { 0,-1,0,1 }, dy[] = { 1,0,-1,0 };
int x = 0, y = 0,d=0;
int len = 1, tlen = 0, cnt = 0, num = 1;
if (r1 <= x && x <= r2 && c1 <= y && y <= c2) {
board[abs(x - r1)][abs(y - c1)] = num;
cnt++;
Max = max(Max, num);
}
while (true) {
for (int i = 0; i < len; i++) {
x = dx[d] + x;
y = dy[d] + y;
num++;
if (r1 <= x && x <= r2 && c1 <= y && y <= c2) {
board[abs(x - r1)][abs(y - c1)] = num;
cnt++;
Max = max(Max, num);
}
}
d = (d + 1) % 4;
if (cnt >= (abs(r1 - r2) + 1) * (abs(c1 - c2) + 1))break;
tlen++;
if (tlen % 2 == 0) {
len++;
tlen = 0;
}
}
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 1469] 숌 사이 수열 (0) | 2021.01.16 |
---|---|
[ boj : 2780] 비밀번호 (0) | 2021.01.13 |
[ boj : 20165] 인내의 도미노 장인 호석 (0) | 2021.01.07 |
[ boj : 2406] 안정적인 네트워크 (0) | 2021.01.07 |
[ boj : 20056] 마법사 상어와 파이어볼 (0) | 2021.01.05 |