목록Algorithm (151)
자이의 프로그래밍
딱히 방법이랄게 없다. 모든 방법과 경우를 고려해주었다. 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..
문제 문자열 A와 B가 주어질 때, 문자열 B가 문자열 A에 포함되어 있는지를 조사하는 프로그램을 작성하시오. 단, 문자열 A와 B에는 알파벳으로만 이루어져 있으며, 공백은 포함되지 않는다고 가정한다. 입력 첫 번째 줄에 문자열 A, 두 번째줄에 문자열 B가 주어진다. 각각의 길이는 1,000을 넘지 않는다. 두 문자열은 모두 소문자 알파벳으로만 구성되어있다. 출력 문자열 B가 문자열 A에 포함되면 YES, 아니면 NO를 출력한다. 예제 입력 watermelon melon 예제 출력 YES -------------------------------------------------------------------------------------------------------------------------..
문제 n개의 문자열이 주어질 때, 이 문자열을 사전순으로 빠른 순서대로 정렬하는 프로그램을 작성하시오. 입력 첫 번째 줄에 문자열의 개수 n이 주어진다 ( 1 ≤ n ≤ 100 ) 그 후 n개의 줄에 대하여 정렬하고자 하는 문자열이 주어진다 ( 1 ≤ 문자열의 길이 ≤ 100 ) 출력 문자열을 사전순으로 빠른 순서대로 정렬한 결과를 출력한다. 예제 입력 9 acid apple banana acquire cat crop crab power cat 예제 출력 acid acquire apple banana cat cat crab crop power -------------------------------------------------------------------------------------------..
문제 문자열의 길이가 굉장히 길 경우, 이를 압축하여 짧게 만들어야 할 때가 종종 있다. 이 문제에서는 문자열이 주어졌을 때, 같은 알파벳이 연속된 부분 문자열을 압축하여 결과를 출력하는 프로그램을 작성한다. 예를 들어, 문자열이 AAABBBBBCCCCDDDDEFFF 라고 하자. 이 문자열을 압축하면, 연속으로 같은 문자가 나오는 부분에, 그 문자가 몇번 나왔는지를 적어줌으로써 압축한다. 즉, 이 문자열은 3A5B4C4DE3F 로 압축된다. E는 1개밖에 없기 때문에 따로 1을 적어주지 않는다. 입력 첫 번째 줄에 압축하고자 하는 문자열이 주어진다. 문자열의 길이는 1000보다 작다. 문자열에 구성된 알파벳은 대문자다. 출력 문자열을 압축한 결과를 출력한다. 예제 입력 AAABBBBBCCCCDDDDEFF..
문제 문자열이 주어질 때, 이를 뒤집어서 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에 문자열이 주어진다. ( 1 ≤ 문자열의 길이 ≤ 1,000 ) 출력 문자열을 뒤집은 결과를 출력한다. 예제 입력 Hello World! 예제 출력 !dlroW olleH ---------------------------------------------------------------------------------------------------------------------------- #include #include using namespace std; int main() { char yh[1005]; fgets(yh, 1000, stdin); int length = strlen(yh); for (int i..