inflearn logo
강의

Course

Instructor

Algorithm Coding Test to Pass in 2 Weeks (2024)

Optimization (Integer Theory) - (Difficulty ⭐️⭐️⭐️⭐️⭐️, Feel free to skip.)

11653번 (2강 최적화) 질문이있습니다.

Resolved

247

leedoy7989

10 asked

1

아래와 같이 완전탐색(?)을 이용해 작성하였는데요, 말씀하신 최적화 방법(약수를 구할때는 해당 수의 제곱근까지만 구해도 약수의 개수와 약수를 구할 수 있다)으로 어떻게 코드를 최적화 할 수 있을지 잘 모르겠습니다.

 

let input = readLine().map { Int($0)! }!

var answer: [Int] = []
var previous = input

func check(i: Int, divided: Int) -> Bool {
    if divided % i == .zero {
        answer.append(i)
        previous = divided / i
        return true
    } else {
        return false
    }
}

if input == 1 {
    
} else {
    for i in 2...(input) {
        var flag = true

        repeat {
            let check = check(i: i, divided: previous)
            flag = check
        } while flag
    }
    
    answer.compactMap { print(String($0)) }
}

 

코딩-테스트 알고리즘 swift

Answer 2

1

leedoy7989



 최적화
 보석값 입력 받기
let gem = readLine().map { Double($0)! }!


//소인수 분해해야함.
var answers: [Int] = []
var previous = Int(gem)
var squreRoot = Int(Double(gem).squareRoot())

func check2(divided: Int, i: Int) -> Bool {
    if divided % i == .zero {
        previous = divided / i
        answers.append(i)
        return true
    } else {
        return false
    }
}
//2,3,4
for i in 2...squreRoot {
    var flag = true
    repeat {
      let result = check2(divided: previous, i: i)
        flag = result
    } while flag
}

if previous != 1 {
    answers.append(previous)
}


answers.sort()
print(answers.count)
print(answers.compactMap { String($0) }.joined(separator: " "))

통과한 답변 공유합니다~

0

jwson

공유 감사합니다!😄

1

jwson

질문 감사합니다 :)!!!

 

저는 아래와 같은 방법으로 최적화를 했습니다 🙂

강의 우측 상단에 보시면 강의자료 다운로드가 가능합니다 !

거기에 제 코드도 있으니 풀어보시고 어려우시면 참고자료로 사용해주세요!

 

최적화 전 (BOJ https://www.acmicpc.net/problem/11653 )

numbers = int(input())
d = 2
while d <= numbers: 
    if numbers % d == 0: 
        print(d) 
        numbers = numbers / d 
    else: 
        d = d + 1

 

최적화 후 (BOJ https://www.acmicpc.net/problem/14232 )

number = int(input())

answer = []

for i in range(2, (int(number**0.5) +1)):

    while(number % i == 0):

        answer.append(i)

        number //= i   

if number != 1 :

    answer.append(number)

print(len(answer))

print(*answer)

1

leedoy7989

답변감사합니다~ 강의자료 다운로드 받아도 지원되는 포맷이 아니라고 뜹니다ㅜㅜ

0

jwson

브라우저가 혹시 지금 사파리이신가요?

 

크롬 브라우저로 확인 가능하시면 부탁드리겠습니다!

 

아마도, 웹 브라우저 OS에 따라서 버그가 있는 것 같네요.. 😢 죄송합니다..!

1

leedoy7989

엇 아뇨 크롬에서 강의 듣고있습니다! 시크릿모드도 아니구요..!

0

jwson

혹시 다른 zip 파일은 압축해제가 잘 될까요?

 

인프런 파일만 문제 발생하고 있다면 제가 인프런 측에 문의해서 답변 요청하겠습니다!

1

leedoy7989

네! 다른 압축파일은 잘 풀립니다~!

1

jwson

인프런 측에 문의해뒀습니다! 답변 오는대로 여기에 답글 달겠습니다 🙂 감사합니다!

dp[x]가 최대값이라고 확신할수 있는 이유

0

44

1

1090번 문제 질문

0

148

1

유니온파인드

0

111

1

투포인터 25:15 질문

1

127

1

#1090번 문제 반례가 궁금합니다.

0

145

1

예제코드 자바입니다

1

186

1

정수론 파트 #2247 문제에 대한 질문입니다!

0

101

0

코드 오류

0

185

1

2강 정수론 문제3 #1407 질문

0

126

0

이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?

0

154

0

1717번 최적화

0

112

0

백준 22988 문제 질문

1

192

2

[Python] 백준 1090번 문제

1

223

3

강의자료에서

1

161

2

2503 문제 제한 조건 질문!

1

248

2

백준 22988 번 문제

1

191

1

추가 강의 순서

1

179

2

(*문제 풀이)1090 테스트케이스 1번 C++

1

219

2

7강 RGB 색칠하기 질문 있습니다.

1

160

2

정수론 약수 빠르게 구하기 질문

1

255

1

1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?

1

372

2

1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.

1

222

2

누적합 문제 3번 질문

1

214

2

기억 ( 누적합 ) 강의 11660 문제

1

162

2