목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 풀이 문제 자체는 어렵지 않지만 사소한 거에서 계속 틀려서 나름 풀이를 써보려 한다. '' 가 나올 때까지 계속 출력, 아닌 경우엔 입력받은 값을 저장해놓고 '공백' 혹은 '') printf("%c", s[i++]); printf("%c", s[i++]); } else if (s[i] == ' ') { rev[loc] = NULL; while (loc > 0) pr..
https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 풀이 문제에서 청소기는 반시계방향으로 회전하므로 순서가 북-서-남-동으로 이동하는데 처음 바라보는 방향은 북-동-남-서이므로 동과 서의 위치를 바꿔주어야 한다. 북-서-남-동의 순서대로 이동하는 배열을 만든 후, 빈칸이 있는 경우 청소기는 무조건 반시계 방향으로 90도 회전하므로, 이전에서 왔던 방향 +1부터 탐색한다. 이 때 이동 후 돌아올 일은..
https://www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net 풀이 각 달의 일수를 저장하고, 총 날짜 수 계산 시 x-1월까지의 날짜 수 + x월의 날짜 수(y)를 더한 후 7로 나누어 요일을 출력 코드 #include int main() { int Month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; char Week[7][4] = { "SUN", "MON","TUE",..
https://www.acmicpc.net/problem/1025 1025번: 제곱수 찾기 첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지 www.acmicpc.net 풀이 시작 지점과 움직이는 방향, 움직이는 간격 등을 모두 고려해야 한다.반복문이 5번 중첩됐지만 표의 범위가 10보다 작아 시간 제한에 걸리지 않는다. 이 때 제곱수는 해당 방향으로 끝까지 이동했을 때의 값이 아닐 수 있다는 것을 유의해야 한다.2 0 00 5 0 0 0 0 일 경우 오른쪽 대각선 아래 방향으로 다 이동한 값인 250이 아닌 25가 답이다. 코드 #include #inc..
https://www.acmicpc.net/problem/1013 1013번: Contact 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤ www.acmicpc.net 풀이 (100+1+ | 01)+의 패턴이므로 주어진 문자열은 무조건 1로 끝나야 한다. 시작이 1인 경우 : 1바로 뒤에 0이 2개 이상 있어야 하며 1이 1개 이상 존재해야 한다. (100...1...) 0인 경우 : 01이어야 하며, 1은 1개여야 한다. (101...) ex. 1001110001 : 10011/10001로 앞의 1+와 1001의 앞 1이 맞닿아 있으므로 뒤의 0이 ..
https://www.acmicpc.net/problem/1174 1174번: 줄어드는 수 음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 수라고 한다. 예를 들어, 321와 950은 줄어드는 수이고, 322와 958은 아니다. N번째로 작은 줄어드는 www.acmicpc.net 풀이 가장 큰 줄어드는 수는 9,876,543,210로 long long의 범위여야 한다. 현재 숫자의 마지막 자리보다 작은 숫자일 경우 Num 함수를 실행하여 줄어드는 수를 만든다. 코드 #include #include #include using namespace std; vector V; void Num(int last, long long num) { V.push_back(num..
https://www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 풀이 map 을 사용. 사실 이걸 몰라서 벡터를 사용해서 사이트의 맨 앞자리 알파벳에 따라 나눠 저장하여 찾았는데 map을 사용한 게 4배 정도 빨랐다. 코드 1 #include #include #include using namespace std; map Site; int main() { cin.tie(NULL); ios::sync_with_stdio(false); ..
https://www.acmicpc.net/problem/17484 17484번: 진우의 달 여행 (Small) 첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2≤ N, M ≤ 6)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다. www.acmicpc.net 풀이 우주선이 세 방향으로 갈 수 있고, 전에 움직인 방향으로는 갈 수 없으므로 직전에 온 방향에 따라 DP[i][j][직전에 온 방향(왼쪽 위, 위, 오른쪽 위)] 으로 세웠다. DP 식의 초기 값은 입력 값으로 저장했고, 0열의 왼쪽 위와 M-1열의 오른쪽 위는 없으므로 식에서 나올 수 없는 큰 값으로 초기화했다. 각 구간을 탐색하며 직전에 오지 않은 방향 중 ..