[완전 탐색] 백준 브론즈1 10448번: 유레카 이론(Swift)

2023. 5. 18. 13:21·코테

https://www.acmicpc.net/problem/10448

 

10448번: 유레카 이론

프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어

www.acmicpc.net

Code
let testCase = Int(readLine()!)!

M: for _ in 0..<testCase {
  let k = Int(readLine()!)!
  var x = 0
  var Tn = [0]
  for n in 1...45 {
    if k < n * (n + 1)/2 {
      x = n
      break
    }
    Tn.append(n * (n + 1)/2)
  }
  for f in 1..<x {
    for s in f..<x {
      for t in s..<x {
        if Tn[f] + Tn[s] + Tn[t] == k {
          print(1)
          continue M
        }
      }
    }
  }
  print(0)
}
풀이과정

주어진 K을 삼각수 3개로 표현이 되는지를 찾는 문제이기 때문에 탐색 문제로 볼 수 있다.

때문에 삼각수를 담고 있는 배열을 먼저 만들어 줘야 계산하기가 편하다.

K의 범위는 3 ≤ K ≤ 1,000이다.

즉, 삼각수 Tn의 n 범위는 1 ≤ n ≤ 45가 된다.

때문에, 배열 Tn은 45의 삼각수의 값까지 만들어 주면 되는데 여기서 경우의 수를 줄이기 위해

주어진 K에 따라 배열 Tn을 만들어 준다.

예를 들어 K가 9라고 한다면, 4의 삼각수 보다 K가 작기 때문에 3의 삼각수까지만, 탐색해 주면 된다.

이처럼, K를 삼각수와 비교하여 탐색할 경우의 수를 줄여 실행 시간을 줄일 수 있다.

탐색의 경우 3자리를 탐색해야 하기 때문에 3중 for 문을 사용한다.

여기서 큰 의미는 없지만, T가 1, 1, 2나 1, 2, 1의 결과값은 같기 때문에 생략이 가능하다.

때문에 상위 반복 문의 값을 활용하여 그 값부터 X까지 탐색하면 중복을 최소한으로 할 수 있다.

Tip
탐색 문제는
문제를 해결하는 것을 중점으로 두고 먼저 해결 후 탐색 범위를 줄여 시간을 단축시키는 방향으로 접근하는 것이 쉽게 문제를 풀 수 있는 방법이라고 생각된다.
위 문제 같은 경우 먼저 1부터 45까지 3중 for 문을 통해 문제를 풀고 탐색 범위를 K 값을 활용해 축소시켜 문제를 풀 수 있다.
처음부터 실행 시간부터 생각하면 문제를 어렵게 접근하게 될 수도 있다.

 

저작자표시 (새창열림)

'코테' 카테고리의 다른 글

[그리디] 백준 실버4 11047번: 동전 0(Swift)  (0) 2023.05.19
[이분 탐색] 백준 실버3 2512번: 예산(Swift)  (0) 2023.05.18
[구현] 백준 실버5 20546번: 기적의 매매법(Swift)  (1) 2023.05.16
[BFS] 백준 실버1 2178번: 미로 탐색(Swift)  (0) 2023.05.16
[다이나믹 프로그래밍] 백준 실버3 1463번: 1로 만들기(Swift)  (0) 2023.05.16
'코테' 카테고리의 다른 글
  • [그리디] 백준 실버4 11047번: 동전 0(Swift)
  • [이분 탐색] 백준 실버3 2512번: 예산(Swift)
  • [구현] 백준 실버5 20546번: 기적의 매매법(Swift)
  • [BFS] 백준 실버1 2178번: 미로 탐색(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    BFS
    챌린지
    동시성
    코딩테스트
    그리디
    Swift
    비동기
    GCD
    PhotoKit
    알고리즘
    완전탐색
    회고
    Race Condition
    탐색
    다이나믹 프로그래밍
    dfs
    photoUI
    이분탐색
    브루트포스 알고리즘
    코테
    ios
    노드
    백준
    구현
    재귀
    Property wrapper
    Combine
    photos
    실버
    네부캠
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[완전 탐색] 백준 브론즈1 10448번: 유레카 이론(Swift)
상단으로

티스토리툴바