티스토리 뷰

문제

 

14490번: 백대열

n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)

www.acmicpc.net

대열이는 욱제의 친구다.

  • “야 백대열을 약분하면 뭔지 알아?”
  • “??”
  • “십대일이야~ 하하!”

n:m이 주어진다. 욱제를 도와주자. (...)


문제 이해하기

n과 m의 최대공약수 g로 n과 m을 나눠주면 두 수를 최대한 약분할 수 있습니다.


코드

package main

import (
	"bufio"
	"bytes"
	"fmt"
	"os"
	"strconv"
)

var (
	scanner = bufio.NewScanner(os.Stdin)
	writer  = bufio.NewWriter(os.Stdout)

	input []byte
)

func main() {
	defer writer.Flush()
	scanner.Split(bufio.ScanWords)

	Setup()
	Solve()
}

func Setup() {
	input = scanBytes()
}

func Solve() {
	nums := bytes.Split(input, []byte{':'})

	a, b := bytesToInt(nums[0]), bytesToInt(nums[1])

	g := gcd(a, b)

	fmt.Fprintf(writer, "%d:%d\n", a/g, b/g)
}

func gcd(a, b int) int {
	if b == 0 {
		return a
	}

	return gcd(b, a%b)
}

func bytesToInt(b []byte) int {
	res := 0
	for _, v := range b {
		res = res*10 + int(v-'0')
	}
	return res
}

func scanBytes() []byte {
	scanner.Scan()
	return scanner.Bytes()
}

시간: 4 ms

메모리:852 KB

분류: 수학, 문자열, 정수론, 유클리드 호제법

글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday
글 보관함