반응형

재학습/알고리즘 6

[boj_2231][GO] 분해합

분해합이란? 어떤자연수 N이있을때 그 자연수 N의 분해합은 N과 N을이루는 각 자리수의 합을 의미 어떤자연수 M의 분해합이 N인경우 M을 N의 생성자라 한다. 245의 분해합? => 245+2+4+5+ = 256 =>245는 256의 생성자이다 (생성자는 없을수도있고, 여러개일수도있다) 자연수 N이 주어졌을때, N의 가장 작은 생성자를 구해야한다. 그렇다면 i=1부터 i

[BOJ 1978] 소수찾기 (에라토스테네스의 체 란?)

소수란? 약수가 1과 자기자신만을 갖는 수를 의미한다. 즉, 아무수에도 나누어 떨어지지않는 수 에라토스테네스의 체란? - 주어진 범위 내의 모든 소수를 찾는 데 사용 - 2부터 시작하여 배수들을 제거해나가며 소수를 찾는 방법 => 그런데 2~n까지 소수를 구한것이 아니라, N이 소수인가?를 판별하는 문제이기에 효율성이 떨어지지않을까 생각된다. 소수판정법 - 2부터 루트(N)까지를 모두 나눠본다. - 루트(N)이상을 하는것은 무의미하기때문 package math_problem import ( "bufio" "fmt" "math" "os" "strconv" "strings" ) func RunBoj1978(){ scanner := bufio.NewScanner(os.Stdin); scanner.Scan() ..

[BOJ 11050] 이항계수 1

이항계수란? - n개의 원소에서 k개의 원소를 뽑아내는 경우의 수 - C(n,k)로 표기됨 - C(n,k) = n!/(k!(n-k)! package math_problem import ( "bufio" "fmt" "os" "strconv" "strings" ) func RunBoj11050(){ scanner := bufio.NewScanner(os.Stdin); scanner.Scan(); str := strings.Split(scanner.Text(), " "); N,_ := strconv.Atoi(str[0]); K,_ := strconv.Atoi(str[1]); cnk := factorial(N) / (factorial(K)*factorial(N-K)); fmt.Println(cnk); } fun..

[BOJ 2609] 최소공약수, 최대공배수 (유클리드호제법)

유클리드 호제법 - 2개의 자연수의 최대공약수를 구하는 알고리즘 호제법 - 두 수가 서로 상대방수를 나누어 결국 원하는 수를 얻는 알고리즘 배경 : 두 자연수 a,b 1. a를 b로 나눈 나머지는 r이라 하면(a>b) 2.a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 그러면 24, 18이 있다면 24를 18로 나눈 나머지는 6 그렇다면 24와 18의 최대공약수는 18과 6의 최대공약수와 같다 18을 6으로 나눈 나머지는 0 그러면 24와 18의 최대공약수 18과 6의 최대공약수 6과 0의 최대공약수 즉, 6이다. 최소공배수는 (a*b)/최대공약수 로 구할 수 있다. 코드로 작성해보자. package math_problem import ( "bufio" "fmt" "os" "strconv" "str..

[알고리즘, 코딩테스트] 문제풀이 방법론에 대하여

기본 절대 답을 먼저 살피지말고 직접 풀이한다 본론 1.경청(정독)하라 - 기본중에 기본이다. 모든 조건과 상황(반복되는것인가 정렬이 이미되어있는것인가 등)을 정확히 알아야한다. 2.예제를 직접 작성하라 - 머릿속에서만 생각한 후 곧바로 문제를 풀지말고 예제를 작성하여 테스트하라 - 이때, 문제에맞는 실제 숫자와 문자열을 사용하며, 특별한 케이스의 예제는 지양한다 - 크기가 크며 구체적인 예제를 만든다. 3.무식하게 먼저 푼다. - 2번예제를 통해만들어진 문제에적합하고, 크기가크며, 구체적인예제를 바탕으로 직관적으로 풀어본다. - 복잡한 제약조건은 단순화해도 괜찮다. - 첫 알고리즘이 형편없어도 괜찮다. 4번에서 개선해나가면 된다. 4.최적화한다. - 1번에서 인지한 정보중 놓친 정보가 있는지 체크한다...

[백준] 백준걸음마 자바 , 컴파일 에러 클래스 명?

https://www.acmicpc.net/problem/2557 public class HelloWorld { public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); bw.write("Hello World!"); bw.close(); } } 헬로월드를 출력하기위에 위와같이 제출한다면 컴파일에러가 발생하게된다. 백준에서는 메인함수가 돌아가는 클래스명을 맞춰줘야 돌아가는 것 같다. 클랫스명은 Main으로! public class Main { public static void main(String[] args) throws..

반응형