본문 바로가기

algorithm

(198)
[BOJ] 10988번 팰린드롬인지 확인하기 (C++) https://www.acmicpc.net/problem/10988 10988번: 팰린드롬인지 확인하기 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net #include #include #include using namespace std; int main() { string s1, s2; cin >> s1; s2 = s1; reverse(s1.begin(), s1.end()); if(s1 == s2) cout
[BOJ] 7576번 토마토 (C++) https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net #include #include using namespace std; #define MAX 1001 int N, M; int arr[MAX][MAX]; int dx[4] = { 1, -1, 0, 0 }; int dy[4] = { 0, 0, 1, -1 }; queue q; void bfs() { while (!q.empty()) { int x = q.front().first; int..
[BOJ] 2644번 촌수계산 (C++) https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net #include #include using namespace std; int n, m; int map[101][101]; int visit[101]; int depth[101]; void bfs(int start){ visit[start] = 1; queue q; q.push(start); while(!q.empty()){ int node = q.front(); q.pop();..
[BOJ] 1914번 하노이 탑 (C++) https://www.acmicpc.net/problem/1914 1914번: 하노이 탑 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net #include #include #include using namespace std; void move(int no, int x, int y){ if(no > 1) move(no - 1, x, 6 - x - y); cout
[BOJ] 10826번 피보나치 수 4 (C++) https://www.acmicpc.net/problem/10826 10826번: 피보나치 수 4 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net #include #include #include using namespace std; int n; string dp[10001]; string big_num_sum(string a, string b){ int sum; string s; vector v, num1, num2; if(a.size() < b.size()){ string tmp = a; a = b;..
[BOJ] 10757번 큰 수 A+B (C++) www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net #include #include #include using namespace std; int main() { string a, b, tmp; cin >> a >> b; int num1[10001], num2[10001]; int sum; vector v; // 더 긴 문자열을 a로 저장 if(a.size() < b.size()){ tmp = a; a = b; b = tmp; } for(int i = 0; i < a.size(); i++) num1[i + 1] = a[i] - '0'; for(int i = 0; i < b..
[BOJ] 1010번 다리 놓기 (C++) https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 > t; int dp[31][31] = {0, }; for(int i = 1; i n >> m; cout
[BOJ] 9461번 파도반 수열 (C++) https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); int t, n; cin >> t; long long dp[101] = {0, }; dp[1] = 1; dp[2] = 1; dp[3] = 1; dp[4] = 2; dp[5] = 2; for(int i = 6; i > n; cout