전체 글

중요한 것은 꺾여도 그냥 하는 마음.
혼잣말

알고리즘 공부를 하는 이유?

누군가는 알고리즘은 실무에선 거의 안 쓰여서 공부하는 건 시간낭비라고 한다. 취직할 때, 코딩테스트 용도로 밖에 쓰지 않는다고. 그외에도 다양한 이유로 필요하기도 할 것이고, 필요하지 않기도 할 것이다. 그럼 내가 알고리즘 공부를 하는 이유는 뭘까. 필자는 친구의 권유로 최근에 다시 알고리즘을 공부하기 시작했다. 필자 또한 알고리즘이 그닥 도움이 되지 않을 것 같아 공부를 접었다. 평소에는 인공지능 공부를 주로 했지만, 내용이 생각보다 어려웠고 진도가 잘 나가지 않아 공부에 어려움이 있었다. 그래서 책을 잡지않는 날이 조금씩 늘어갔고, 머리가 계속해서 굳어가는 것을 느꼈다. 방금 찾으려고 했던 것이 생각나지 않고, 곱셈도 조금씩 헷갈렸다. 그럴 때 친구가 백준으로 알고리즘 공부하는 걸 보고 같이 해봤다...

IT/BOJ 문제정리

백준 1932번: 정수 삼각형

https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 0. 알고리즘 분류 다이나믹 프로그래밍 1. 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. ..

IT/BOJ 문제정리

백준 1149번: RGB 거리

https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 0. 알고리즘 분류 다이나믹 프로그래밍 1. 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 ..

IT/BOJ 문제정리

백준 1034번: 램프

https://www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져 www.acmicpc.net 0. 알고리즘 분류 브루트포스 알고리즘 1. 문제 지민이는 각 칸마다 (1*1크기의 정사각형) 램프가 들어있는 직사각형 모양의 탁자를 샀다. 모든 램프는 켜져있거나 꺼져있다. 각 열의 아래에는 스위치가 하나씩 달려있는데, 이 스위치를 누를 때마다 그 열에 있는 램프의 상태가 바뀐다. (켜져있는 램프는 꺼지고, 꺼져있는 램프는 켜진다) 만약 어떤 행에 있는 램프가 모두 켜져있을 때, 그 행이..

IT/BOJ 문제정리

백준 9663번: N-Queen

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 0. 알고리즘 분류 브루트포스 알고리즘, 백트래킹 1. 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 2. 풀이 처음 봤을 때, 어떻게 풀지 감이 잡히지 않아 알고리즘 분류를 봤다. 브루트포스. 완전 탐색. 그냥 전부 돌리면 된다고 한다. 주어진 시간은 넉넉하게 10초. N * N..

IT/BOJ 문제정리

백준 2230번: 수 고르기

https://www.acmicpc.net/problem/2230 2230번: 수 고르기 첫째 줄에 두 정수 N, M(0≤M≤2,000,000,000)이 주어진다. 다음 N개의 줄에는 차례로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0 ≤ |A[i]| ≤ 1,000,000,000을 만족한다. www.acmicpc.net 0. 알고리즘 분류 정렬, 두 포인터 1. 문제 N(1≤N≤100,000)개의 수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 수열이 {1, 2, 3, 4, 5}라고 하자. 만약 M=3일 경우, 1 4, 1 ..

IT/BOJ 문제정리

백준 2292번: 벌집

https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 0. 알고리즘 분류 수학 1. 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개..

IT

백준 C/C++에서 windows.h 컴파일에러: gotoxy()

백준은 리눅스 환경에서 코드를 돌리기 때문에, #include 를 쓸 수 없다. 그러나 문제를 풀다보면, gotoxy()와 같은 커서이동함수를 쓰거나 콘솔창을 만지는 일이 생긴다. // C/C++에서 커서를 이동시키는 gotoxy()함수. #include void gotoxy(int x, int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } 그럴 때는 백준/리눅스 환경에 출력할 수 있는 문법을 익혀야 한다. // 리눅스 환경에서의 gotoxy()함수. void gotoxy(int x, int y) { printf("\033[%d;%df",y,x); fflush(std..

IT/BOJ 문제정리

백준 2839번: 설탕 배달

https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 0. 알고리즘 분류 수학, 다이나믹 프로그래밍, 그리디 알고리즘 1. 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3..

IT/BOJ 문제정리

백준 1003번: 피보나치 함수

https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 0. 알고리즘 분류 다이나믹 프로그래밍 1. 문제 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. 1 2 3 4 5 6 7 8 9 10 11 int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. f..