11179번: 2진수 뒤집기백준/문제2024. 3. 19. 12:18
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/11179
언어 : Kotlin
문제 설명 :
희연이는 스웨덴으로 이사하여 현재 학교를 다니고 있다. 1학년 교육과정은 중국에서 배웠고, 스웨덴과 중국 두 나라의 교육과정은 완전히 다르다. 희연이는 수학을 좋아한다. 하지만 지금은... 선생님은 칠판에 뺄셈을 설명하고 있어서 희연이는 수업에 흥미가 없다. 칠판에 있는 수들을 역 이진법으로 나타낸 수들로 같은 계산을 수행하는 것이 가능할까? 희연이는 몽상을 하며 시간을 보냈고, 머릿속으로 역 이진법 표시 프로그램을 구상하기 시작했다. 수업이 끝나는대로 희연이는 집에가서 컴퓨터에 그것들을 적을 것이다.
당신이 할 일은 역 이진법 프로그램을 작성하는 것이다. 예를 들어 13을 2진법으로 나타내면 1101이고, 이것을 뒤집으면 1011이 된다. 이 수를 다시 10진법으로 나타내면 11이다.
입력 :
입력은 한 줄에 정수 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력 :
입력받은 N을 2진법으로 나타낸 뒤 뒤집어, 다시 10진법으로 나타낸 수를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
13 | 11 |
47 | 61 |
풀이 :
문제 그대로.
input값을 toBinary 함수에 넣어 2진수로 변환한 후, toDecimal 함수에 변환한 2진수를 뒤집어서 넣어 10진수로 변환하고 결과값을 받는다.
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.pow
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
bw.write(toBinary(readLine()))
bw.flush()
bw.close()
}
fun toBinary(n: String): String {
var num = n.toInt()
val sb = StringBuilder()
while (num != 0) {
val temp = num % 2
if (temp > 9) {
sb.insert(0, (temp + 55))
} else {
sb.insert(0, temp)
}
num /= 2
}
return toDecimal(sb.toString().reversed())
}
fun toDecimal(n: String): String {
var answer = 0
var power = n.lastIndex
for (i in n.indices) {
val num = n[i]
answer += if (num in 'a' .. 'z') {
(num.code - 87) * (2.0).pow(power--).toInt()
} else {
(num.code - '0'.code) * (2.0).pow(power--).toInt()
}
}
return answer.toString()
}
'백준 > 문제' 카테고리의 다른 글
2608번: 로마 숫자 (0) | 2024.03.20 |
---|---|
5656번: 비교 연산자 (0) | 2024.03.20 |
5026번: 박사 과정 (1) | 2024.03.19 |
9243번: 파일 완전 삭제 (0) | 2024.03.19 |
15312번: 이름 궁합 (0) | 2024.03.18 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!