1022번: 소용돌이 예쁘게 출력하기
첫째 줄에 r1, c1, r2, c2가 주어진다. 모두 절댓값이 5000보다 작거나 같은 정수이고, r2-r1은 0보다 크거나 같고, 49보다 작거나 같으며, c2-c1은 0보다 크거나 같고, 4보다 작거나 같다.
www.acmicpc.net
[난이도] Gold4
[유형] 구현
[풀이]
소용돌이의 오른쪽 아래 꼭지점은 (2*n+1)^2 라는점을 이용
#include <cstdio> #include <cmath> #include <algorithm> using namespace std; int r1,r2,c1,c2; int getV(int r,int c){ int a = max(abs(r),abs(c)); int v = (2*a+1); v*=v; if(a==r) return v-(a-c); v-=2*a; if(-a==c) return v-(a-r); v-=2*a; if(-a==r) return v-(a+c); v-=2*a; return v-(a+r); } int main(){ scanf("%d%d%d%d",&r1,&c1,&r2,&c2); int k = 0; for(int i=r1;i<=r2;i++){ for(int j=c1;j<=c2;j++){ int v = getV(i,j); k = max(v,k); } } int t = 0; while(k>0){ t++; k/=10; } for(int i=r1;i<=r2;i++){ for(int j=c1;j<=c2;j++){ printf("%*d ",t,getV(i,j)); } puts(""); } }
github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/1022.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 10830 : 행렬 제곱(C++) (0) | 2020.12.12 |
---|---|
[BOJ/백준][Gold4] 1403 : 거짓말(C++) (0) | 2020.12.12 |
[BOJ/백준] 2624: 동전 바꿔주기 (C++) (0) | 2020.07.28 |
[BOJ/백준] 2143: 두 배열의 합(C++) (0) | 2020.07.05 |
[BOJ/백준] 2632 : 피자판매 (C++) (0) | 2020.06.30 |