-
Baekjoon_9093_단어 뒤집기Algorithm/_Baekjoon 2023. 5. 14. 18:40
문제 주소: https://www.acmicpc.net/problem/9093
단어 뒤집기의 문제는 다음과 같습니다.
해당 문제의 경우 주어진 문장의 각 단어들을 뒤집어야 합니다.
Python
저는 이 문제를 해결하기 위해서 이중 for문을 사용하였으며 코드는 다음과 같습니다.
repeat_num = int(input()) # 입력할 문장의 갯수 reverse_word = [] # 빈 list를 하나 생성 for i in range(repeat_num): # 입력을 받은 값 만큼 반복 word = input().split() # 문장을 입력받으며 띄어쓰기로 나눠서 list로 받음 for j in range(len(word)): # 문장을 나눠받은 list의 갯수 만큼 반복을 함 r_word = word[j][::-1] # 문장을 나눠받은 list의 순서대로 단어를 뒤집음 reverse_word.append(r_word) # 뒤집은 단어를 위에서 생성한 빈 list에 추가 print(' '.join(reverse_word)) # list로 나눠진 단어를 .join을 사용하여 하나로 합침 reverse_word.clear() # list를 clear로 비워줌
위의 코드에서의 특이점은 .join() 부분입니다. 이는 list로 분해된 것을 하나로 합쳐주는 역할을 합니다.
하지만, 다른분들이 숏코딩을 한 것을 보면 다음과 같은 한줄 코드도 볼 수 있습니다.
exec('print(*input()[::-1].split()[::-1]);'*int(input()))
- exec(), eval()
여기서 exec()를 볼 수 있습니다.
이는 기본적으로 문자열로 된 코드를 Input으로 받아 그 코드를 실행만 시키고 아무것도 return 하지 않는 코드입니다.
위의 경우는 *int(input())에서 우선 반복 횟수를 정한 후 내부의 문자열 수식을 사용합니다.
exec()를 공부하신다면, eval()도 함께 보시는걸 추천합니다.
차이점은 다음과 같습니다.
exec(): 문자열로 된 수식을 input으로 받아 그 결과를 return하지 않습니다.
eval(): 문자열로 된 수식을 input으로 받아 그 결과를 return합니다.
C++
#include <iostream> #include <string> #include <stack> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(NULL); // 변수 설정 int repeat_number; string sentence; stack <char> word; cin >> repeat_number; // 반복횟수 입력 cin.ignore(); // 버퍼 비우기 for (int i = 0; i < repeat_number; i++) { getline(cin, sentence); // 문자열 입력 sentence += ' '; // 문장의 끝 변화를 알기 위해 추가 for (int j = 0; j < sentence.size(); j++) // sentence size만큼 반복 { if (sentence[j] == ' ') { while(!word.empty()) //word가 비워질 때까지 반복 { cout << word.top(); // 맨 뒤의 스택 출력 word.pop(); // 맨 뒤의 스택 제거 }cout << ' '; } else { word.push(sentence[j]); // 처음에 word에 단어 저장 } }cout << "\n"; } }
문제를 풀기 위해 2개의 for문과 1개의 while문을 사용했다.
- getline을 통해 한 줄씩 받아옴.
- 반복횟수 이후에 buffer를 비워줌. (ignore)
- stack을 사용하여 stack 출력과 제거를 진행.
'Algorithm > _Baekjoon' 카테고리의 다른 글
Baekjoon_10845_큐 (0) 2023.05.18 Baekjoon_1406_에디터 (0) 2023.05.17 Baekjoon_1874_스택 수열 (0) 2023.05.15 Baekjoon_9012_괄호 (0) 2023.05.14 Baekjoon_10828_스택 (0) 2023.05.14