본문 바로가기
코딩테스트/Cos Pro 1급 Java

[Cos Pro 1급 Java] [1차] 문제5) 소용돌이 수

by drCode 2021. 3. 15.
728x90
반응형

안녕하세요.

이번 포스팅은 Cos Pro 1급 Java 1차 5번 문제 소용돌이 수를 풀어보겠습니다.

 

edu.goorm.io/learn/lecture/17301/cos-pro-1%EA%B8%89-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-java/lesson/839399/1%EC%B0%A8-%EB%AC%B8%EC%A0%9C5-%EC%86%8C%EC%9A%A9%EB%8F%8C%EC%9D%B4-%EC%88%98-java

 

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 + " 입니다.");
    }
}
728x90
반응형

댓글