Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

19-SeongHoonC #72

Merged
merged 2 commits into from
Apr 17, 2024
Merged

19-SeongHoonC #72

merged 2 commits into from
Apr 17, 2024

Conversation

SeongHoonC
Copy link
Collaborator

πŸ”— 문제 링크

큰 수 λ§Œλ“€κΈ°

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

1μ‹œκ°„

✨ μˆ˜λ„ μ½”λ“œ

μš°μ„ μˆœμœ„νμ— 비ꡐ 정책을 λ„£μ–΄μ€˜μ„œ μ •λ ¬ν–ˆμŠ΅λ‹ˆλ‹€.

첫 번째 μ •λ‹΅

μ–΄μ°¨ν”Ό μˆ«μžλŠ” 10μžλ¦¬κ°€ μ΅œλŒ€μ΄κΈ° λ•Œλ¬Έμ— 10μžλ¦¬κΉŒμ§€ λ°˜λ³΅ν•΄μ„œ λΉ„κ΅ν•œλ‹€
10 vs 101
1010101010 vs 1011011011
뒀에 것이 더 크기 λ•Œλ¬Έμ— ν›„μžκ°€ λ¨Όμ € μ •λ ¬λœλ‹€.

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val n = br.readLine().toInt()
    val numbers = br.readLine().split(" ")
    val queue = PriorityQueue<Target>()
    numbers.forEach {
        queue.add(Target(it))
    }
    val stringBuilder = StringBuilder()
    while (queue.isNotEmpty()) {
        stringBuilder.append(queue.poll().number)
    }
    if (stringBuilder.all { it == '0' }) {
        println(0)
        return
    }
    println(stringBuilder.toString())
}

data class Target(val number: String) : Comparable<Target> {
    override fun compareTo(other: Target): Int {
        return if (makeStr(number, 10) > makeStr(other.number, 10)) -1 else 1
    }

    private fun makeStr(s: String, length: Int): String {
        var next = s
        while (next.length < length) {
            next += s
        }
        return next.substring(0, 10)
    }
}

두 번째 μ •λ‹΅

두 숫자λ₯Ό a+b b+a λ₯Ό λΉ„κ΅ν•΄μ„œ a+b κ°€ 더 크면 a λ₯Ό 더 μ•žμ— λ°°μΉ˜ν•œλ‹€.
10 vs 101
10101 vs 10110
뒀에 것이 더 크기 λ•Œλ¬Έμ— ν›„μžκ°€ λ¨Όμ € μ •λ ¬λœλ‹€.

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val n = br.readLine().toInt()
    val numbers = br.readLine().split(" ")
    val queue = PriorityQueue<Target>()
    numbers.forEach {
        queue.add(Target(it))
    }
    val stringBuilder = StringBuilder()
    while (queue.isNotEmpty()) {
        stringBuilder.append(queue.poll().number)
    }
    if (stringBuilder.all { it == '0' }) {
        println(0)
        return
    }
    println(stringBuilder.toString())
}

data class Target(val number: String) : Comparable<Target> {
    override fun compareTo(other: Target): Int {
        return if (number + other.number > other.number + number) -1 else 1
    }
}

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

@alstjr7437
Copy link
Member

문제 클릭도 ν•˜κΈ°μ „μ— μ΅œλŒ€κ°€ 10μžλ¦¬κΉŒμ§€μΈ 힌트λ₯Ό μ–»μ–΄μ„œ ν’€μ–΄λ΄€λ„€μš”!!

  1. λͺ¨λ“  수λ₯Ό list에 10의자리둜 λ§Œλ“ λ‹€
  2. ν•΄λ‹Ή 수λ₯Ό κΈ°μ€€μœΌλ‘œ λͺ¨λ‘ μ •λ ¬ν•œλ‹€.
  3. μ •λ ¬ν•œ 수λ₯Ό μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•œλ‹€.
  4. 0이면 0을 좜λ ₯ν•œλ‹€.

예)
3, 30, 34, 5, 9κ°€ λ“€μ–΄κ°€λ©΄

μ •λ ¬ μ „

[(['3', '3', '3', '3', '3', '3', '3', '3', '3', '3'], '3'),
(['3', '0', '3', '0', '3', '0', '3', '0', '3', '0'], '30'),
(['3', '4', '3', '4', '3', '4', '3', '4', '3', '4'], '34'),
(['5', '5', '5', '5', '5', '5', '5', '5', '5', '5'], '5'),
(['9', '9', '9', '9', '9', '9', '9', '9', '9', '9'], '9')]

μ •λ ¬ ν›„

[(['9', '9', '9', '9', '9', '9', '9', '9', '9', '9'], '9'),
(['5', '5', '5', '5', '5', '5', '5', '5', '5', '5'], '5'),
(['3', '4', '3', '4', '3', '4', '3', '4', '3', '4'], '34'),
(['3', '3', '3', '3', '3', '3', '3', '3', '3', '3'], '3'),
(['3', '0', '3', '0', '3', '0', '3', '0', '3', '0'], '30')]

으둜 λ“€μ–΄κ°€μ„œ 좜λ ₯ν•˜κ²Œ λ˜λŠ” ν˜•μ‹μœΌλ‘œ ν’€μ—ˆμŠ΅λ‹ˆλ‹€.
μ„±ν›ˆλ‹˜μ΄ ν‘Έμ‹  1λ²ˆμ •λ‹΅κ³Ό λ˜‘κ°™μ€ λ°©μ‹μœΌλ‘œ ν‘Ό 것 κ°™λ„€μš”!!

import sys
input = sys.stdin.readline

n = int(input())
nums = list(map(int,input().split()))

result = []

# 10의자리 수둜 λ§Œλ“€κΈ°
for num in nums:
    temp = []
    while len(temp) < 10 :
        for i in str(num):
            temp.append(i)
            if len(temp) >= 10:
                break
    result.append((temp, str(num)))

sorted_result = sorted(result, key=lambda x: int(''.join(x[0])),reverse=True)

# μ •λ ¬ ν•œ κ²°κ³Ό 문자 λ§Œλ“€κΈ°
answer = ""
for i in sorted_result:
    answer += i[-1]

# 0인지 보고 좜λ ₯ν•˜κΈ°
if int(answer) == 0:
    print(0)
else :
    print(answer)

Copy link
Collaborator

@wkdghdwns199 wkdghdwns199 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ•ž λ’€ 숫자λ₯Ό λ³‘ν•©ν•˜λŠ” 경우의 수λ₯Ό 2개 계속 λΉ„κ΅ν•˜λ©° μ΅œλŒ€ 크기의 숫자λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 숫자 리슀트λ₯Ό λ§Œλ“œλŠ” μ½”λ“œμž…λ‹ˆλ‹€!

import sys
input=sys.stdin.readline
N=int(input())
numbers = list(input().split())

for i in range(N-1, 0, -1):
    for j in range(i):
        A=numbers[j]
        B=numbers[j+1]
        AB  = int(A+B)
        BA = int(B+A)
        if AB < BA :
            numbers[j], numbers[j+1] = numbers[j+1], numbers[j]

S = "".join(numbers)
if S[:2]=='00':
    print('0')
else :
    print(S)

@SeongHoonC SeongHoonC merged commit f12298c into main Apr 17, 2024
2 of 6 checks passed
@SeongHoonC SeongHoonC deleted the 19-SeongHoonC branch April 17, 2024 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants