안녕하세요.
이번 포스팅은 Cos Pro 1급 Java 1차 5번 문제 소용돌이 수를 풀어보겠습니다.
goorm
구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.
www.goorm.io
이 문제는 기존에 풀었던 프로그래머스 레벨 2 삼각 달팽이랑 문제가 비슷합니다.
오히려 삼각달팽이보다 쉬울 수 있습니다.
drcode-devblog.tistory.com/104?category=931716
[프로그래머스/java] 월간 코드 챌린지 시즌1 삼각 달팽이
n진수 게임에 이어서 Level 2짜리 문제를 풀었는데 제한사항을 잘 보고 풀어야한다는걸 다시 한 번 느끼게 되는 것 같다. programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,..
drcode-devblog.tistory.com
※ 프로그램 구현문제
□ 문제설명
다음과 같이 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 해주세요.
□ 예시
n | return | |
예시 #1 | 3 | 15 |
예시 #2 | 2 | 4 |
□ 예시설명
예시 #1
문제의 예와 같습니다.
예시 #2
1과 3을 더하여 4가 됩니다.
※ 문제 접근 방식
(1) 방향을 정합니다. dir : 0 -> → , dir : 1 -> ↓, dir : 2 -> ←, dir : 3 -> ↑
(2) while문으로 방향대로 순회합니다.
(3) 끝에 도달했을 때 방향을 바꿔줍니다.
(4) n의 제곱이 되었을 때 whlie문을 나갑니다.
(5) 대각선의 합을 구해줍니다. a[i][i]
import java.util.*;
class Main {
public int solution(int n) {
int[][] arr = new int[n][n];
int i = 0, j = 0;
int dir = 0; // dir : 0 -> → , dir : 1 -> ↓, dir : 2 -> ←, dir : 3 -> ↑
int num = 1;
while(true) {
arr[i][j] = num;
if(dir == 0 && (j == n-1 || (j < n-1 && arr[i][j+1] != 0 ))) dir++;
else if(dir == 1 && (i == n-1 || (i < n-1 && arr[i+1][j] != 0))) dir++;
else if(dir == 2 && (j == 0 || (j > 0 && arr[i][j-1] != 0))) dir++;
else if(dir == 3 && (i == 0 || (i > 0 && arr[i-1][j] != 0))) dir = 0;
if(dir == 0) j++;
else if(dir == 1) i++;
else if(dir == 2) j--;
else if(dir == 3) i--;
if(num == (int)Math.pow(n, 2)) break;
num++;
}
int answer = 0;
i = 0;
while(i <= n-1) {
answer += arr[i][i]; i++;
}
return answer;
}
public static void main(String[] args) {
Main sol = new Main();
int n1 = 3;
int ret1 = sol.solution(n1);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");
int n2 = 2;
int ret2 = sol.solution(n2);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
}
}
'코딩테스트 > Cos Pro 1급 Java' 카테고리의 다른 글
[Cos Pro 1급 Java] [2차] 문제6) 로봇을 움직여주세요 (0) | 2021.03.16 |
---|---|
[Cos Pro 1급 java] [2차] 문제5) 언제까지 오르막길이야..?! (0) | 2021.03.16 |
[Cos Pro 1급 java] [2차] 문제4) 합이 k 배가 되는 수 (2) | 2021.03.16 |
[Cos Pro 1급 Java] [1차] 문제6) 체스의 나이트 (0) | 2021.03.15 |
[Cos Pro 1급 Java] [1차] 문제4) 타임머신 (1) | 2021.03.15 |
댓글