전체 글
-
[SWEA] 1989. 초심자의 회문 검사 c++Coding Test/SW Expert Academy 2022. 11. 15. 12:33
문제 "level" 과 같이 거꾸로 읽어도 제대로 읽은 것과 같은 문장이나 낱말을 회문(回文, palindrome)이라 한다. 단어를 입력 받아 회문이면 1을 출력하고, 아니라면 0을 출력하는 프로그램을 작성하라. 문제 해결 reverse함수를 사용하여 string의 순서를 반전시키고 비교하는 방법으로 문제를 풀었다. #include #include using namespace std; int main(int argc, char** argv) { int test_case; int T; cin>>T; for(test_case = 1; test_case > str; cout
-
[SWEA] 2001. 파리 퇴치 c++Coding Test/SW Expert Academy 2022. 11. 15. 12:23
문제 N x N 배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다. M x M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이고자 한다. 파리를 잡을 수 있는 최댓값을 구하는 문제이다. [제약 사항] 1. N 은 5 이상 15 이하이다. 2. M은 2 이상 N 이하이다. 3. 각 영역의 파리 갯수는 30 이하 이다. [입력] 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 번째 줄에 N 과 M 이 주어지고, 다음 N 줄에 걸쳐 N x N 배열이 주어진다. [출력] 출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) input out..
-
[SWEA] 2005. 파스칼의 삼각형 c++Coding Test/SW Expert Academy 2022. 11. 15. 10:30
문제 크기가 N인 파스칼의 삼각형을 만들어야 한다. 입력 1 4 출력 #1 1 1 1 1 2 1 1 3 3 1 문제 해결 이전 행렬의 j, j+1 열의 값을 더하면 현재의 값이 된다. index범위가 벗어난다면 0으로 계산하면 된다. #include #include using namespace std; int main(int argc, char** argv) { int test_case; int T; cin>>T; for(test_case = 1; test_case > n; cout
-
[SWEA] 2007. 패턴 마디의 길이 c++Coding Test/SW Expert Academy 2022. 11. 15. 09:40
문제 패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라. [제약 사항] 각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다. [입력] 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다. [출력] 출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) 문제 해결 1. substr를 이용해서 마디 검사를 한다. 2. 인덱스로 접근하기 때문에 out of range를 방지하기 위해 인덱스 검사도 추가하였다. tmp.substr(i, i) : i 부터 i개 ..
-
[SWEA] 1859. 백만 장자 프로젝트 c++Coding Test/SW Expert Academy 2022. 11. 14. 23:37
문제 1. 연속된 N일 동안의 물건의 매매가가 주어진다. 2. 하루에 최대 1만큼 구입할 수 있다. 3. 판매는 얼마든지 할 수 있다. 입력 첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스 별로 첫 줄에는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 각 날의 매매가를 나타내는 N개의 자연수들이 공백으로 구분되어 순서대로 주어진다. 각 날의 매매가는 10,000이하이다. 출력 각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 최대 이익을 출력한다. 문제 해결 1. N일 동안의 물건의 매매가를 vector에 저장한다. (N일 동안의 물건의 매매가를 알고 있다는 가정이므로) 2. vector 뒤에서 부터 검사한다. 3. ..
-
[프로그래머스] 과일 장수 c++Coding Test/programmers 2022. 11. 11. 17:03
문제 설명 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다. 한 상자에 사과를 m개씩 담아 포장합니다. 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다. 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다) 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 ..
-
[Algorithm] Union-Find algorithmComputer Science/Algorithm 2022. 11. 7. 17:19
Disjoint Set - 서로 중복되지 않는 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료구조 즉, 공통 원소가 없는 "상호 배타적"인 부분 집합들로 나눠진 원소들에 대한 자료구조 Union-Find algorithm - 서로소 집합(Disjoint Set)을 표현할 때 사용하는 알고리즘 - 그래프 알고리즘으로 Union(합집합) + Find(찾기) 로 '합집합 찾기'라는 의미를 가지고 있다. - 여러 노드 중 2개의 노드를 선택하여 같은 그래프에 속해 있는 지 확인하는 알고리즘이다. 연산 - Make-set(x) // 초기화 : x를 유일한 원소로 하는 새로운 집합 생성 - Union(x, y) // 합하기 :원소 x가 속한 부분집합과 원소 y가 속한 부분집합의 합집합을 구한다. ..
-
[프로그래머스] 거리두기 확인하기 c++Coding Test/programmers 2022. 10. 12. 10:59
문제 설명 대기실은 5개이며, 각 대기실은 5x5 크기입니다. 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요. 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다. ※ 두 테이블 T1, T2가 행렬 (r1, c1), (r2, c2)에 각각 위치하고 있다면, T1, T2 사이의 맨해튼 거리는 |r1 - r2| + |c1 - c2| 입니다. 제한 사항 places의 행 길이(대기실 개수) = 5 places의 각 행은 하나의 대기실 구조를 나타냅니다. places의 열 길이(대기실 세로 길이) = 5 places의 원소는 P,O,X로 이루어진 문자열입니다. places 원소의 길이(대기실 가로 길이) = 5 P는 응시자가 앉아있는 자리를 의미합니다. O..