https://www.acmicpc.net/problem/6996 6996번: 애너그램 첫째 줄에 테스트 케이스의 개수(> n; for (int i = 0; i > str1 >> str2; if (str1.size() != str2.size()) { // 글자수 먼저 구별 cout
Koala - 7기
https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 문제해석 책 이름을 n개만큼 입력 받고, 가장 많이 입력받은 책 이름을 출력하는 문제이다. 코드 #include #include #include #include using namespace std; int main(){ int Max =0; int n; cin >> n; map m; string str; for(int i=0;i> str; m[str]++; } for (int i= m.be..
백준 1149 RGB거리 Intro Solution 주어진 규칙 중 세 번째 규칙이 앞의 두 규칙을 모두 포함하는 말이다. 연속으로 같은 색깔을 색깔을 선택할 수 없으므로, 색깔별로 나누어 누적 비용을 저장한다. n번째 집에서 빨강을 선택할 때는 n-1번째 집에서 초록을 선택할 경우의 비용의 누적 합과 파랑을 선택할 경우의 비용의 누적 합을 비교하여 최솟값을 찾아 더하면 된다. 예를 들어 입력이 다음과 같다고 해보자. 입력 3 26 40 83 49 60 57 13 89 99 그러면 비용의 누적 합은 다음과 같은 순서로 저장된다. ''' dp[1] = [26, 40, 83] dp[2] = [49+min(40, 83), 60+min(26, 83), 57+min(26, 40)] = [89, 86, 83] dp..
https://www.acmicpc.net/problem/7579 7579번: 앱 입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활 www.acmicpc.net 문제 분석 새로운 앱을 활성화하기 위해서 기존에 활성화 된 앱들을 종료해 메모리를 확보하는 문제입니다. 앱을 종료할 때 고려할 사항으로는 앱이 차지하는 메모리와 앱을 종료했을 때 발생하는 비용이 있습니다. 새로운 앱을 활성화 할 수 있을 만큼 충분한 메모리를 확보하면서 비용은 최소화하는 것이 목적입니다. 일종의 배낭 문제로, 다이나믹 프로그래밍을 활용해 문제를 해결할 수 있습니다. 얼핏 보기에 메모리가 ..
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제분석 분류 DP(동적계획법) 문제설명 입력받은 수를 최소한의 연산으로 1로 만들기 연산은 3종류 x-1 if(x % 3 == 0), x / 3 if(x % 5 == 0), x / 5 동적계획법 Bottom-up 방식으로 진행 입력 10 출력 3 코드 #include #include #include using namespace std; vectordp; int main() { int n; cin >> n; dp.assign(n+1,-1); dp[1] = 0; for (int x = 2; x
https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 문제분석 현재 자신이 있는 위치보다 낮은 위치로 갈 수 있고 0,0 에서 n-1,m-1까지 갈 수 있는 경로의 개수를 구하는 문제이다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokeni..
https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제분석 1) '('의 개수와 ')'의 개수가 같은지 파악 2) 개수는 같지만 ')'가 먼저 입력될 경우 3) 끝날 때 '('로 끝나는 경우 문제풀이 - '('과 ')'의 짝이 맞는지 '('가 나오면 +1, ')'가 나오면 -1을 하는 count 선언 - 만약 ')'가 먼저 나오는 경우 count가 음수로 가기 때문에 음수로 가는 경우가 있는지 변수 t를 통해서 저장..
https://www.acmicpc.net/problem/9657 9657번: 돌 게임 3 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 문제 분석 돌 N개가 있을 때, 상근이와 창영이가 돌아가면서 돌을 1개, 3개 또는 4개를 가져간다. 마지막 돌을 가져가는 사람이 이기게 된다. 둘은 완벽한 게임을 한다. 조건. 상근이가 먼저 돌을 가져간다. 입력으로는 돌의 개수가 주어지고, 상근이가 게임을 이기면 SK, 창영이가 이기면 CY를 출력한다. 코드 #include using namespace std; int main(){ int n; cin>>n; int shobu[n+1]; shobu[1] = 1; shobu[2] = 0; shobu[3] = 1; ..
소스코드 N,M=input().split() if N==M: print('1') else: print('0') 문제풀이 2개의 값 N,M을 대입 받습니다. 만약 송찬이가 필요한 베터리 N과 선생님이 가져온 베터리 M이 같으면 1을 출력하고, 다르면 0을 출력합니다.
소스코드 N,M,K = input().split() N = int(N) M = int(M) K = int(K) m = K%M n = K//M print(n,m) 문제풀이 관중석의 행의 수 N, 열의 수 M 그리고 관중석 번호 K를 input()과 split()를 통해 한번에 입력 받아서 각 변수를 정수값으로 타입을 바꿔주었습니다. 그리고 관중석의 좌표를 (n,m)으로 잡고 m이 몇열인지 알기 위해서 K를 M으로 나눴을 때의 나머지를 활용해 구했고 N의 행을 구하기 위해서 K를 M으로 몇번 나눌 수 있는지를 활용해 구해냈습니다. 저는 처음에 문제를 보자마자 while반복문만 떠올라서 풀었는데 이렇게 쉽게 풀 수 있는 방법을 떠올리기 쉽도록 노력해야겠습니다.
1673번: 치킨 쿠폰 (acmicpc.net) 1673번: 치킨 쿠폰 강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환 www.acmicpc.net 소스코드 문제 풀이 치킨 쿠폰 / k + 치킨 쿠폰 수 라고 처음 생각했으나 그 방법으로는 출력 예시대로 안나오길래 많이 당황한 문제이다. 쿠폰을 이용해 치킨을 먹고 치킨을 먹을수록 도장이 쌓이고 그 도장으로 다시 쿠폰으로 만들어서 치킨을 먹기 때문에 처음 내 생각이 틀렸던 것을 알 수 있었다. (한번 노트로 정리해서 쓰니까 어렵지 않았다.) while문으로 위에 적은 문장을 그대로 표현했는데, 수학적으로 깔끔하고..
https://www.acmicpc.net/problem/4435 4435번: 중간계 전쟁 첫째 줄에 전투의 개수 T가 주어진다. 각 전투는 두 줄로 이루어져 있다. 첫째 줄에 간달프 군대에 참여한 종족의 수가 주어진다. 이 값은 공백으로 구분되어 있으며, 호빗, 인간, 엘프, 드워프, www.acmicpc.net 문제분석 전투의 개수를 입력 받고 간달프 군대의 유닛수와 사우론 군대의 유닛수를 입력받아 각 유닛의 점수를 반영해서 총점을 비교하여 승패를 결정해야 합니다. 소스 코드 t=int(input()) for i in range(t): a,b,c,d,e,f=map(int,input().split()) A,B,C,D,E,F,G=map(int,input().split()) if a+2*b+3*c+3*d+..