1차 69분
빈칸 | 1 | 3:58 | 3:58 |
빈칸 | 2 | 6:08 | 2:10 |
빈칸 | 3 | 10:55 | 4:47 |
구현 | 4 | 13:57 P | 3:02 |
구현 | 5 | 34:47 | 20:50 |
구현 | 6 | 45:38 | 10:51 |
빈칸 | 7 | 48:44 | 3:06 |
한줄 | 8 | 52:26 | 3:42 |
한줄 | 9 | 58:14 | 5:48 |
한줄 | 10 | 1:06:25 | 8:11 |
다시 | 4 | 1:09:25 | 3:00 |
가장 오래 풀었던 5번
소용돌이 수
다음과 같이 n x n 크기의 격자에 1부터 n x n까지의 수가 하나씩 있습니다.
이때 수가 다음과 같은 순서로 배치되어있다면 이것을 n-소용돌이 수라고 부릅니다.
소용돌이 수에서 1행 1열부터 n 행 n 열까지 대각선상에 존재하는 수들의 합을 구해야 합니다.
위의 예에서 대각선상에 존재하는 수의 합은 15입니다.
격자의 크기 n이 주어질 때 n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 하도록 solution 함수를 완성해주세요.
매개변수 설명
격자의 크기 n이 solution 함수의 매개변수로 주어집니다.
* n은 1 이상 100 이하의 자연수입니다.
return 값 설명
n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 해주세요.
예시
내가푼답
// 하단과 깉이 include를 사용할 수 있습니다.
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
using namespace std;
int solution(int n) {
int answer = 0;
int init = 1;
vector<int> v;
v.push_back(1);
int i=1;
while(n-i > 0) {
v.push_back(init+(n-i)*2);
int temp = init+(n-i)*4;
if(temp <= n*n) {
v.push_back(temp);
init = temp;
}else break;
i += 2;
}
answer = accumulate(v.begin(), v.end(), 0);
return answer;
}
정답
#include <bits/stdc++.h>
#define pb push_back
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define fastio() ios::sync_with_stdio(0),cin.tie(0);
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int inf = 0x3c3c3c3c;
const ll infl = 0x3c3c3c3c3c3c3c3c;
int pane[103][103];
int inRange(int i, int j, int n){
return 0 <= i && i < n && 0 <= j && j < n;
}
int dy[4] = {0, 1, 0, -1};
int dx[4] = {1, 0, -1, 0};
int solution(int n){
int ci = 0, cj = 0;
int num = 1;
while(inRange(ci, cj, n) && pane[ci][cj] == 0){
for(int k = 0; k < 4; k++){
if(!inRange(ci, cj, n) || pane[ci][cj] != 0) break;
while(1){
pane[ci][cj] = num++;
int ni = ci + dy[k];
int nj = cj + dx[k];
if(!inRange(ni, nj, n) || pane[ni][nj] != 0){
ci += dy[(k + 1) % 4];
cj += dx[(k + 1) % 4];
break;
}
ci = ni;
cj = nj;
}
}
}
int ans = 0;
for(int i = 0; i < n; i++) ans += pane[i][i];
return ans;
}
'Coding Test' 카테고리의 다른 글
[COS Pro] 1급 3차 C++ (소수) (0) | 2022.02.28 |
---|---|
[COS Pro] 1급 2차 C++ (조합) (0) | 2022.02.28 |
[COS Pro] 1급 체험 C++ (벡터 합, 최대/최소값) (0) | 2022.02.26 |
[카카오]Lv2 거리두기 확인하기 C++ (0) | 2022.02.23 |
[카카오]Lv2 멀쩡한 사각형 C++ (최대공약수) (0) | 2022.02.23 |