BOJ 2292 : 벌집

Ok Haeeun·2022년 12월 22일
0

Go로 algorithm문풀

목록 보기
12/16

진짜 졸린 관계로 빠르게 정리하고 자야겠다.

어제 문제를 풀때도 말했던 것처럼
input 값의 범위가 아주 몹시 몹시 크다는 것은 반복문 쓰지 말라는 얘기와도 같아서, 이 문제 역시 공식으로 접근하는 것이 좋겠다는 생각이 들었다.

문제에서의 벌집은
1 -> 7 -> 19 -> 37 -> ...
은 6*(i-1)씩 더해진다는 규칙을 가진다.

패턴에는 역시 방정식..
입력값으로부터 어느 커트라인 사이에 있는지를 계산하는 문제이므로
근의 공식으로 풀었다.

루트 값을 어떻게 줘야되나 생각했었는데
golang에서 math.Pow(float64, float64) 함수를 이용해
math.Pow(루트 안에 들어갈 값, 0.5)를 해주면 된다는 간단한 아이디어를 얻은 후

다음과 같이 풀었다.

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

func getIndex(N int) int{
	n := int(math.Ceil((3+(math.Pow(float64(12*N-3), 0.5)))/6))
	return n
}

func main(){
	var n int

	stdin := bufio.NewReader(os.Stdin)
	_, err := fmt.Scan(&n)

	if err != nil{
		fmt.Println(err)
		stdin.ReadString('\n')
	} else{
		fmt.Println(getIndex(n))
		}
	}

Go는 진짜 시간 효율 미친놈임

profile
貫徹

0개의 댓글