[C++, 프로그래머스 - Lv.0] 정수를 나선형으로 배치하기

2023. 7. 4. 18:36·코테/프로그래머스


[C++, 프로그래머스 - Lv.0] 정수를 나선형으로 배치하기

사용 언어 : C++

 

< 문제 내용 >

 

< 생각 >

문제 해결을 위해서, 값이 상승하는 방향을 잡아주면 해결되는 문제였다.

 

오른쪽 -> 아래쪽 -> 왼쪽 -> 위쪽

 

순서로 반복되기 때문에 방향을 잡아줄 변수를 선언하고 해당 방향에 맞게끔 값을 채워넣어주면 된다.

 

이때, 현재 위치가 배열의 최소 값과 최대 값보다 작거나 클 경우를 대비하여, 다음 위치를 선행 탐색하는 기능을 추가한다.

작거나 크다면, 맵의 바깥에 있다는 것이므로 다음 방향으로 전환해준다.

 

또, 다음 위치에 존재하는 값이 특정 값이 아니라면, 이미 지나갔다는 소리이므로, 방향을 변경해주면 쉽게 풀 수 있다.

 

< 해결 내용 >

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
	vector<vector<int>> answer(n, vector<int>(n, -1));
	int dirX[4] = { 0, 1, 0, -1 };
	int dirY[4] = { 1, 0, -1, 0 };

	int dir = 0;

	int x = 0;
	int y = 0;

	int nextX = 0;
	int nextY = 0;

	for (int i = 1; i <= n * n; ++i) {
		answer[x][y] = i;

		nextX = x + dirX[dir];
		nextY = y + dirY[dir];

		if (nextX < 0 || nextX >= n || nextY < 0 || nextY >= n || answer[nextX][nextY] != -1) {
			dir = (dir + 1) % 4;

			nextX = x + dirX[dir];
			nextY = y + dirY[dir];
		}

		x = nextX;
		y = nextY;
	}

	return answer;
}

'코테 > 프로그래머스' 카테고리의 다른 글

[C++, 프로그래머스 - Lv.0] 주사위 게임 3  (0) 2023.07.19
[C++, 프로그래머스 - Lv.0] 연속된 수의 합  (0) 2023.07.19
[C++, 프로그래머스 - Lv.0] 안전지대  (0) 2023.07.19
[C++, 프로그래머스 - Lv.0] 겹치는 선분의 길이  (0) 2023.07.04
[C++, 프로그래머스 - Lv.0] 옹알이 (1)  (0) 2023.07.04
'코테/프로그래머스' 카테고리의 다른 글
  • [C++, 프로그래머스 - Lv.0] 연속된 수의 합
  • [C++, 프로그래머스 - Lv.0] 안전지대
  • [C++, 프로그래머스 - Lv.0] 겹치는 선분의 길이
  • [C++, 프로그래머스 - Lv.0] 옹알이 (1)
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      오블완
      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [C++, 프로그래머스 - Lv.0] 정수를 나선형으로 배치하기
    상단으로

    티스토리툴바