[Programmers] n^2 배열 자르기

2025. 8. 25. 20:45·알고리즘/Swift

문제

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

풀이코드

import Foundation

func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
    return (left...right)
    .map { idx in
          let row = Int(idx) / n
          let col = Int(idx) % n
          return max(row, col) + 1
         }
}

 

풀이 과정

규칙을 찾는데 꽤나 시간이 걸렸다, 특별한 알고리즘 지식이 필요하진 않아 보였고,

단순 규칙을 찾는 문제였다.

 

n의 범위값을 보자마자 "아 이건 2차원 배열을 만들고 1차원으로 정렬한 뒤 계산하면 무조건 시간초과다"

라는건 떠올랐지만 규칙을 어떻게 찾아야 할지 감이 안왔다, 무작정 그림을 그려가며 풀이를 하였는데 

 

작은 값부터 그려보니 규칙이 그려졌다,

N = 2, Left = 2, Right = 3

위와 같은 조건이라고 했을때 우선, 문제에서 요구하는 대로 2차원 배열을 그리고 수를 채워 넣는다.

n = 2 인 2차원 배열

 

이 2차원 배열을 이제 1차원 배열로 만들어 보면 다음과 같다

2차원 배열을 펼친 1차원 배열

그리고 해당 배열에서 left ~ right 만 남기고 지워보자

left 부터 right 까지만 남기고 제거

그럼 [2, 2] 가 나와야 하는데, 여기서 생각을 하는데 꽤나 오랜 시간이 흘렀다,

초기 2차원 배열에서 좌표계로 접근 해 보면

좌표계로 변환한 그림 및 요구사항에 맞는 칸 색칠

다음과 같다, 

즉, left 부터 right 까지 for 문을 돌리고,

이 값들에 n을 나누었을때 몫이 x 좌표, 나머지가 y 좌표이다

 

이 (x,y) 좌표중 큰 수에 + 1 을 더한 값이 바로 정답에서 요구하는 [2,2] 가 되는것을 알 수 있다.

 

var answerArray: [Int] = []

for (left...right) in idx {
    let x = idx / n		// x 좌표
    let y = idx % n		// y 좌표
    
    let answer = max(x,y) + 1	// 정답 배열에 들어갈 수
    answerArray.append(answer)
}

return answerArray

 

코드를 풀어쓰면 위와 같은게 정답이다.

 

초기에 이렇게 풀었다가 고차함수를 활용하고 싶어서 map 함수를 이용해 바로 return 하게 구현했다.

'알고리즘/Swift' 카테고리의 다른 글
  • [BOJ] 2164 - 카드2
  • [BOJ] 1918 - 후위 표기식
  • [BOJ] 1935 - 후위 표기식2
  • [BOJ] 17299 - 오등큰수
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스위프트
    프로그래머스
    코딩
    swift
    자료구조
    javascript
    SwiftUI
    개발자
    Algorithm
    IOS
    42seoul
    boj
    1서클
    본과정
    네트워크
    라피신
    알고리즘
    42서울
    hig
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
[Programmers] n^2 배열 자르기
상단으로

티스토리툴바