목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1032 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net 코드 #include #include int main() { int N, len; char A[51], cmp[51]; scanf("%d", &N); for (int i = 0; i < N; i++) { if (i == 0) { scanf("%s", A); len = strlen(A); } else { scanf("%s", cmp); for (int j = 0; j < len; j++) { ..
https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 풀이 배열 정렬 후 이분탐색 이용 코드 #include #include using namespace std; int A[100000]; bool Is_in(int n, int N) { int start = 0, mid, end = N - 1; while (start n) end = mid - 1; else start = mid + 1; } retur..
https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 풀이 처음엔 N+M개의 수를 모두 Set에 넣고 N+M-Set size의 갯수를 출력했는데, 그럼 set에 들어가는 원소가 많아서인지 틀림.그래서 N개의 문자열을 받고 M개의 문자열을 그와 비교하는 식으로 풀었다. 코드 #include #include #include #include using namespace std; set Set; int main() { int..
https://www.acmicpc.net/problem/16139 16139번: 인간-컴퓨터 상호작용 첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째 www.acmicpc.net 풀이 i번째일 때 각 원소가 총 몇 개 들어왔는 지 저장하는 배열을 만들고, 이를 문자열의 길이만큼 벡터에 저장함. l~r에 포함된 문자의 갯수이므로 l번째 문자도 포함해야 한다. 따라서 r-(l-1)을 해야 하는데, 이 때 l=0이면 오류가 나므로 처음에 모든 알파벳의 갯수를 0으로 초기화 해줌 코드 #include #include #includ..
https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 풀이 주어진 재귀함수에 DP를 적용함.배열 w의 값이 얼마일지 모르니 visit 배열을 추가해 방문했다면 w에 저장된 값을 바로 반환함. 범위 제한은 -50 ~ 50이지만 주어진 함수에서 0이하, 20 이상은 같은 값을 가지므로 DP배열의 범위는 0~20으로 지정. 코드 #include int w[21][21][21]; bool visit[21][21][21]; int Get_W(int a, int ..
https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 풀이 바로 옆집과만 다른 색으로 칠하면 되므로, i-1번째 집이 각각 R/G/B로 칠했을 때 i번째 집은 G,B/R,B/R,G로 칠해질 수 있다.따라서 i번째 집까지 칠했을 때의 최소 비용은 i-1번째 집이 각각 R/G/B로 칠했을 때 각각 3가지 경우를 따로 구하여 저장하고, 마지막 집을 칠한 후의 결과값 3개를 비교해서 가장 적은 값이 N개의 집을 칠하는 최소 비용이다. ..
https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 코드 #include int main() { long long int P[101] = { 0,1,1,1,2,2,3 }; // 범위 주의 int N, T; scanf("%d", &T); for (int t = 0; t < T; t++) { scanf("%d", &N); for (int i = 7; i
https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 풀이 R이 나올 때마다 배열의 시작점을 바꿔줌. 테스트 케이스가 여러 개인만큼, 입력으로 0이 연속으로 들어오는 등의 경우도 고려해야 함. 코드 #include #include #include #include using namespace std; deque D; string S; int Get_res(int N) { int i; bool front = true; for (i = 0; i < N; i++) { if (S[i] == 'R') front = ..