🖥️ 시작하며
파이썬으로는 그냥 쉽게 풀린다.
C언어로는
reverse 함수를 지정하고, 그때그때 최소인지 판정하도록 구현했다.⚙️ 코드
import sys def solution(word): words = [] for i in range(1, len(word)): for j in range(i + 1, len(word)): a = word[:i][::-1] b = word[i:j][::-1] c = word[j:][::-1] words.append(a + b + c) return min(words) if __name__ == "__main__": input = sys.stdin.readline word = input().rstrip() print(solution(word))
#include <stdio.h> #include <string.h> #define MAX_LEN 51 void reverse(char *start, char *end) { while (start < end) { char temp = *start; // 1. 시작 문자를 임시 변수에 저장 *start++ = *end; // 2. 끝 문자를 시작 위치에 복사하고, 시작 포인터를 오른쪽으로 이동 *end-- = temp; // 3. 임시 저장된 문자를 끝 위치에 복사하고, 끝 포인터를 왼쪽으로 이동 } } void transform(const char *word, char *result, int i, int j) { int len = strlen(word); strncpy(result, word, i); reverse(result, result + i - 1); strncpy(result + i, word + i, j - i); reverse(result + i, result + j - 1); strcpy(result + j, word + j); reverse(result + j, result + len - 1); } int main() { char word[MAX_LEN], result[MAX_LEN], min_result[MAX_LEN]; scanf("%s", word); int len = strlen(word); int first = 1; // 첫 번째 변환된 단어인지 여부 for (int i = 1; i < len; i++) { for (int j = i + 1; j < len; j++) { transform(word, result, i, j); // 첫 번째 단어면 무조건 min_result로 복사 if (first || strcmp(result, min_result) < 0) { strcpy(min_result, result); first = 0; } } } printf("%s\n", min_result); return 0; }
![[백준] 1251 - 단어 나누기](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2F6246036c-28ac-4ece-90f1-2e1347bad3ba%2Fi_baekjoon.png?table=block&id=117d2f02-2ff6-8093-b0fc-d59abc39f421&cache=v2)
![[백준] 1251 - 단어 나누기](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2Fa28333f4-adb0-4b37-8b18-70028a85d8ed%2Fw_baekjoon.jpg?table=block&id=117d2f02-2ff6-8093-b0fc-d59abc39f421&cache=v2)

댓글