목록Algorithm/Cases-Study (76)
자이의 프로그래밍
cnt라는 변수를 사용해서 10번씩 카운팅해주었다. num이라는 변수는 해당 문자가 출력되어야할 횟수이다. num만큼 출력하면서 cnt를 더하며 cnt가 10이 된다면 줄 바꿈을 해주었다. cnt를 초기화하지 않아 다음 문자열에서도 값을 유지한채 계속 사용하게끔 했다. #include #include #include #include #include using namespace std; int main(){ int test_case; cin>>test_case; for(int T=1; T>n; vector v; v.clear(); for(int i=0; i>ch>>num; v.push_back(make_pair(ch, num)); } int cnt=0; cout
매 달의 날짜수를 day라는 배열에 저장해주었다. 입력받는 두 개의 달이 다르다면 day 배열에서 먼저 있는 달을 빼주면서 날짜를 계산했고 먼저 있는 달을 하나씩 더하면서 두 개의 달이 같은 달이 될때까지 반복했다. 같은 달이 된다면 두 개의 값을 빼서 최종 sum이라는 값에 더해주었다. #include using namespace std; int day[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int main(){ int test_case; cin>>test_case; for(int T=1; T>m1>>d1>>m2>>d2; int sum=0; while(m1
BFS로 해결했다.. 사실 그럴 필요는 없었을 것 같은데 풀 당시에 떠오르는 생각이 그것밖에 없었다. 네 방향을 지정해준뒤 진행을 하다가 범위를 벗어나거나, 이미 달팽이가 방문한 칸을 만난다면 방향을 전환해주었다. 방향을 전환한 뒤에 만난 점을 아직 달팽이가 만나지 않았다면 체크배열에 검사해주고 큐에 push 해주었다. #include #include #include using namespace std; int ch[11][11]; int dx[]={0, 1, 0, -1}; int dy[]={1, 0, -1, 0}; int main(){ int test_case; cin>>test_case; for(int T=1; T>n; memset(ch, 0, sizeof(ch)); int dir=0; queue q..
딱히 방법이랄게 없다. 모든 방법과 경우를 고려해주었다. checking() 함수는 현재 향하는 방향에서 다음 위치의 파이프가 연결이 되는지 여부를 확인해주었다. direction 벡터는 현재 파이프의 번호를 받고 향할 수 있는 방향들을 모두 push해서 return 해주었다. 그렇게 받은 방향들을 토대로 BFS로 진행하였다. 마지막에 점검은 파이프가 존재하는 칸이면서, 방문한 칸이고, l값(탈출 후 소요된 시간)보다 작은 값일 경우에 방문했다고 가정하고 값을 하나씩 더해주었다. #include #include #include #include #include using namespace std; int dx[]={0, 1, 0, -1}; int dy[]={1, 0, -1, 0}; int ch[60][60..
순열을 사용했다. 절반만큼 1을 넣어주고 정렬을 해준뒤에 next_permutation 함수를 사용했다. 자기자신끼리 검사하는 경우도 허용했는데, 어차피 0이라 크게 상관없을 것 같아 그대로 구현해주었다. #include #include #include using namespace std; int arr[20][20]; int main(int argc, char** argv) { int test_case; int T; cin>>T; for(test_case = 1; test_case >n; vectora(n, 0); for(int i=0; iarr[i][j]; } } for(int i=0; i
DFS로 해결했다. 일단 한번 n*n씩 탐색을 하면서 등산로의 봉우리값을 찾았고 다시 탐색을 하면서 봉우리값과 같으면 벡터에 push해주었다. 입력받은 칸을 복사한 뒤에 해당 벡터의 봉우리에 해당하지 않는다면 1부터 깊이만큼 빼가면서 탐색을 하였고 그 길이를 ans라는 변수에 저장하게 해서 결국 ans에는 최댓값이 저장되도록 하였다. #include #include #include #include using namespace std; int dx[]={1, 0, -1, 0}; int dy[]={0, 1, 0, -1}; vector v; int ans, n, deep, maximum; int map[8][8]; bool visit[8][8]; void dfs(int x, int y, int l, int a..
마름모 모양을 구현하기 위해 num이라는 수를 사용했다. 현재 위치한 행-num부터~ 현재 위치한 행+num까지로 행의 마름모 모양을 구현했다. 열의 마름모 모양은 i열보다 작으면 k를 늘려서 점점 검사하는 열이 많아지게 했고, 그렇지 않다면 k를 줄여서 점점 검사하는 열을 줄였다. 운영비용은 문제의 식과 같은 방식으로 구현을 했다. 0~n-1(도시의 크기-1)까지의 모든 마름모를 구현한 뒤에 최댓값을 반환하는 함수로 구현했다. #include #include #include #include #include using namespace std; int n, m, maximum; int map[20][20]; int cal(int num) { if (num > n) { return maximum; } fo..
문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 숫자를 버리는 함수이다. 배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다. 각 테스트..