문제 & 링크https://www.acmicpc.net/problem/9252 풀이1. dp 테이블을 0으로 초기화한다.2. 두 문자열을 dp 테이블의 1부터 시작하도록 반복문을 설정한다.3. 각 문자열의 원소가 같을 경우 dp[i][j]라면 dp[i-1][j-1]에서 1을 더해서 저장한다. 대각선의 값에서 1을 더하는 이유는 각 문자열에서 i번째 j번째 문자가 빠졌을 때 i-1번째, j-1번째 까지의 공통 부분 수열이 1 줄어야 하기 때문이다.4. 각 문자열의 원소가 다를 경우 dp[i][j]라면 dp[i-1][j]와 dp[i][j-1] 중 큰 값을 저장한다. 5. 3 - 4의 과정을 반복하며 dp 테이블의 마지막 원소에서 LCS의 길이를 구할 수 있다.6. dp 테이블의 마지막 원소(LCS의 길이)로..
분류 전체보기
문제 & 링크https://www.acmicpc.net/problem/1107 풀이1. 리모컨은 0 - 9까지 10개의 버튼을 가지고 있기에 길이가 10인 bool 자료형의 배열을 만들고, 입력받은 버튼을 true로 설정한다.2. 현재 채널이 100이기에 +, - 버튼만으로 원하는 채널에 도달할 때 누르는 횟수를 저장한다. 이때 음수값을 가질 수도 있으니 abs() 함수를 이용하여 양수로 저장한다.3. 이동하고자 하는 채널이 최대 500,000번 이기에 1,000,000번 채널에서 - 버튼을 누르는 경우도 생각하여 반복문을 수행한다.4. 해당 채널의 번호가 부서진 버튼을 포함하고 있는지 check 함수를 통해 확인한다. 이때 채널 번호를 string 형태로 바꾸고 한 글자 단위로 확인한다.5. 만약 채널..
https://www.acmicpc.net/problem/11728 문제풀이두 배열의 크기를 각각 A, B로 정의하고 정수값을 입력받습니다.A만큼 item으로 들어갈 정수를 a, B만큼 item으로 들어갈 정수를 b로 입력받습니다. a와 b를 더한 값을 combined라는 변수에 저장합니다.combined에 저장한 값을 정렬합니다.그 후 정렬된 값을 공백을 낀 채로 출력합니다.문제풀이A, B = map(int, input().split())a=list(map(int, input().split()))b=list(map(int, input().split()))combined=a+bsorted_arr=sorted(combined)print(' '.join(map(str, sorted_arr)))감사합니다.
https://acmicpc.net/problem/5533문제 풀이n = int(input())arr = [list(map(int,input().split())) for _ in range(n)]ans = [0]*nfor i in range(3): d = {} for j in range(n): score = arr[j][i] if score in d: d[score] += 1 else: d[score] = 1 for k in range(n): score = arr[k][i] if d[score] == 1: ans[k] += scoreprint('\n'.join(map(..
https://www.acmicpc.net/problem/10798문제 풀이1. 2차원 배열 형식으로 입력받기2. 각 줄의 최대 길이를 비교 (해당 문자열의 길이가 최대 길이보다 작다면 넘어갈 수 있도록)3. 출력할 순서로 정리할 리스트 생성4-1. 문자열의 길이가 최대길이보다 짧으면서 확인하는 위치가 비어있는 곳이라면 건너뛰기4-2. 위에서 해당사항이 없다면 출력 리스트에 추가5. 출력 리스트 출력문제 코드arr = []for i in range(5): arr.append(list(input()))max_length = 0for i in range(5): if len(arr[i]) > max_length: max_length = len(arr[i]) toPrint =..
10773번: 제로 (acmicpc.net)a= int(input())x=[]s=0for i in range(a): t=int(input()) if t!=0: x.append(t) else: x.pop()for i in range(len(x)): s+=x[i]print(s)가장 간단한 스택 문제이다. 입력받은 t가 0이 아니라면 스택에 쌓아주고 0이면 가장 최근 걸 pop() 해준다.
문제https://www.acmicpc.net/problem/1012코드#include #include #include using namespace std;int arr[51][51];bool visited[51][51];int m, n, k;void dfs(int a, int b) { // 방향 벡터 정의 (상하좌우) int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; visited[a][b] = true; for (int i = 0; i = 0 && nx = 0 && ny > t; while (t--) { memset(arr, 0, sizeof(arr)); memset(visited..
https://www.acmicpc.net/problem/18406문제문제풀이점수 N을 문자열로 입력받는다. 문자열 N의 길이는 항상 짝수이기 때문에 문자열의 자릿수를 기준으로 반으로 나눈다. 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 반복문을 통해서 구한다. 그 이후 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합이 같다면 "LUCKY"를 출력하고, 만약에 다르다면 "READY"를 출력한다.소스코드N = input()l = 0r = 0for i in range(len(N)//2): l += int(N[i]) r += int(N[-1-i])if l == r: print("LUCKY")else: print("READY")
https://www.acmicpc.net/problem/15903문제석환이는 아기다. 아기 석환이는 자연수가 쓰여져있는 카드를 갖고 다양한 놀이를 하며 노는 것을 좋아한다. 오늘 아기 석환이는 무슨 놀이를 하고 있을까? 바로 카드 합체 놀이이다!아기 석환이는 자연수가 쓰여진 카드를 n장 갖고 있다. 처음에 i번 카드엔 ai가 쓰여있다. 카드 합체 놀이는 이 카드들을 합체하며 노는 놀이이다. 카드 합체는 다음과 같은 과정으로 이루어진다.x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y)계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다.이 카드 합체를 총 m번 하면 놀이가 끝난다. m번의 합체를 모두 끝낸 뒤, n장의 카드에 쓰여있는 수를 모두 더한 값이 ..
풀이#include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin.tie(NULL); int N; cin >> N; deque> dq; for( int i = 1; i > dq_num; dq.push_back(make_pair(i, dq_num)); } cout 0 ) { tmp--; for( int i = 0; i tmp; --i ) { dq.push_front(dq.back()); dq.pop_back(); ..
- 문제https://www.acmicpc.net/problem/14235- 알고리즘입력으로 0이 들어온 곳에서는 현재 가지고 있는 선물중에 가치가 가장 높은 선물을 주고, 줄 선물이 없다면 -1을 출력하면 되는 문제이다.이때, 현재 가지고 있는 선물중에 가치가 높은 선물을 선별하기 위해 우선순위 큐를 사용하였다. 파이썬에 내장되어있는 module을 가져왔고, 이 모듈에서 get을 할때 가장 낮은 숫자부터 get을 해주기 때문에, 선물의 가치에 -1을 곱하여 음수로 표현한 뒤 넣어주었다. 이렇게 하면 절댓값이 가장 높은 수부터 get이 되고, 나중에 출력할때 -1을 곱해서 출력하도록 구성하였다.이 문제에서 입력에 0 or a+1만큼의 숫자들로 입력이 진행되기 때문에, 리스트로 받아서 리스트의 첫번째 원소..