개요 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 2xn 직사가형을 2x1, 1x2 직사각형으로 채우기 문제입니다. 그림을 보면 매우 쉽게 풀 수 있던 문제입닌다. 일단 기본적으로 이전 거에서 1x2를 붙이는 것만으로 경우의 수가 어느 정도 정해졌습니다 그리고 또 알 수 있는 건 이전의 이전 거를 기준으로 2x2에 공간이 생겼는데 여기에도 2x1을 두개 넣은 2x2 정사각형을 붙임으로써 고유 경우의 수를 만들 수 있습니다 말로만 하면 그런가라는 생각이 들 수 있..
Go Lang/Algorithm
브루스 포스 브루트 포스(brute force), 키 전수조사(exhaustive key search) 또는 무차별 대입(無差別代入)이라 불리는 알고리즘있습니다, 알고리즘이라고 칭하기도 애매하지만 알고리즘입니다. 바로 모든 경우의 수를 때려 박는 알고리즘입니다. 가장 완벽하며 가장 비효율적인 알고리즘이라고 할 수 있습니다 브루스 포스로 문제를 하나 풀었습니다. https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 처음에 흰색으로 시작할 때와 ..
개요 https://www.acmicpc.net/problem/2607 2607번: 비슷한 단어 첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이 www.acmicpc.net 처음에는 1920번 수 찾기를 풀었던 경험을 살려 정렬 후 비교하는 로직의 방향으로 코드를 개발했습니다. 다음 규칙을 만족하면 비슷한 단어를 취급합니다 구성은 GOD와 DOG를 두고 각각의 알파뱃의 개수가 완전히 같은 경우를 말한다. 문자의 글자수가 같다면 안에 구성이 하나는 달라도 된다. 글자수 차이가 1개가 난다면 안의 구성이 하나는 달라도 된다. 비슷한 단어를 찾을 값과 비슷한 단어의..
개요 https://www.acmicpc.net/problem/7489 생각을 잘못해서 몇 번 틀린 문제입니다. 간단하게 팩토리얼 수에서 최우측의 0이 아닌 값을 출력하면 되는 문제인데 아 10보다 큰수는 10의 나머지로 계산하면 더 계산이 빨라지겠구나라는 생각을 하여 아래 코드를 넣은 게 실수였습니다. 왜냐하면 25같이 특정 수와 만나면 10의 제곱이 되는 수가 존재하기 때문에 함부로 나머지 연산을 사용하면 안되는 거였죠 if result > 10 { result = result % 10 } 코드 위와 비슷한 코드가 들어갑니다. 문제에서 언급했듯이 70!은 부동 소수점 변수의 위치까지 넘어가는 매우 큰 수 이므로 이를 처리해야 하는 코드가 필요합니다. 그래서 아래 코드를 넣었습니다, 이 코드도 수가 더..
개요 https://www.acmicpc.net/problem/1920 해당 문제는 5년 전 고등학생때 했었던 문제입니다. 하도 풀어도 시간초과가 발생해서 포기했던 기억이 나네요. 어떻게 하면 M개의 난수가 A배열에 있는 지를 찾는지가 관건인 문제였습니다. 지금 보니 시간 복잡도를 조금만 줄이면 되는 문제로 이진 탐색으로 해결했습니다. 이진 탐색 알고리즘 알고리즘을 배우면 가장 먼저 배우는 알고리즘으로 작년에 다시 시도했을 때도 알고 있던 알고리즘이었습니다. 이를 적용할 생각이 없던 게 아쉽네요 정의는 아래 그림으로 보시면 이해하는 것이 편할 겁니다. 위하고 문제의 다른 점은 어떤 수들이 오는지 모르고 정렬되지 않고 입력된다는 점입니다. 탐색하면서 절반 씩 범위를 줄이기 때문에 시간 복잡도는 O(logN..
https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 위 문제는 소수 구할 때 자주 쓰이는 알고리즘인 에라토스테네스의 체를 사용하면 됩니다. 에라토스테네스의 체에 대한 설명은 나무 위키가 역시.. 잘 나와있습니다 https://namu.wiki/w/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%20%EC%B2%B4 과정 또한 예시가 있으므로 이해가 쉬우실 것입니다. 수열에서 소수의 배수들을 전부 제..
백준 사이트의 1003번의 문제는 문제에서 보여주는 피보나치 함수를 사용하면 100% 시간 초과가 날것입니다. 시간이 초과되는 이유는 재귀함수의 사용이라는 것은 대부분 감이 오실 것입니다. 하지만 재귀 없이 피보나치 만들기는 처음에는 당황스럽지만 재귀를 배열로 표현한다고 생각하시면 쉽게 이해하실 것입니다. 위 문제에서 fibonacci(3), fibonacci(2), fibonacci(1)를 배열로 생각해봅시다. 그러면 아래와 같은 코드로 표현이 가능해집니다. package main import ( "bufio" "fmt" "os" ) func main() { // cmd로 입력받기 위한 bufio 선언 reader := bufio.NewReader(os.Stdin) writer := bufio.NewW..