ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cospro] 소용돌이 수
    Algorithm 2022. 2. 18. 16:16
    01 COS PRO 1급 JAVA 1차
    100%
    [1차] 문제5) 소용돌이 수 - JAVA
     
    실습 내용

    ※ 프로그램 구현문제

    □ 문제설명

    다음과 같이 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가 됩니다.

     

    package com.example.codingtest.cospro.first;
    
    public class 소용돌이수 {
        public static void main(String[] args) {
            int data1 = 3;
            int data2 = 2;
            System.out.println(solution(data1));
        }
    
        public static int solution(int n){
            int answer = 0;
            int[][] arr = new int[n][n];
            int number = 1;
    
            int x = 0;
            int y = 0;
            char direction = 'r';
    
            for(int i = 0; i < n * n; i++){
                arr[x][y] = number++;
    
                switch (direction){
                    case 'r':
                        if(y + 1 < n && arr[x][y+1] == 0){
                            y++;
                        } else {
                            direction = 'd';
                            x++;
                        }
                        break;
                    case 'l':
                        if(y - 1 >= 0 && arr[x][y-1] == 0){
                            y--;
                        } else {
                            direction = 'u';
                            x--;
                        }
                        break;
                    case 'u':
                        if(x - 1 >= 0 && arr[x-1][y] == 0){
                            x--;
                        } else {
                            direction = 'r';
                            y++;
                        }
                        break;
                    case 'd':
                        if(x + 1 < n && arr[x+1][y] ==0){
                            x++;
                        } else {
                            direction = 'l';
                            y--;
                        }
                        break;
                }
    
            }
            for(int i = 0; i < n; i++){
                answer += arr[i][i];
            }
    
            return answer;
        }
    }

    'Algorithm' 카테고리의 다른 글

    [프로그래머스] 로또 최고순위와 최저순위  (0) 2022.02.18
    [cospro] 체스의 나이트  (0) 2022.02.18
    [cospro] 언제까지 오르막길이야  (0) 2022.02.18
    [cospro] 합이 k가 되는 배수  (0) 2022.02.18
    [JAVA] 다트게임  (0) 2022.02.13
Designed by Tistory.