[백준] 17413 단어 뒤집기 2 - Java / Python
스택을 사용해서 어떻게 풀어볼 수 있지 않을까?라는 생각이 드는 문제였다.
그런데 스택으로 어떻게 접근해야 할지 감이 안 와서.. 문제에서 하라는 대로 구현했다.
1. 태그는 뒤집으면 안된다.
2. 띄어쓰기를 기준으로 단어를 구분하고 단어를 뒤집는데, 마지막 단어에는 띄어쓰기가 없다.
3. 단어 다음 여는 괄호가 등장해도 단어로 구분하고 뒤집는다.
위 세 가지에 집중해서 구현하면 어렵지 않게 풀 수 있는 문제였다.
Java
조건에 맞춰 구현하다 보니.. 코드가 좀 더러워졌다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
boolean check = false;
ArrayList<Character> list = new ArrayList<>();
for(int i=0; i<str.length(); i++){
if(str.charAt(i)=='<'){
sb.append('<');
check = true;
}
if(check){
if(str.charAt(i)=='>'){
check = false;
sb.append('>');
}else{
if(str.charAt(i)=='<'){
}else{
sb.append(str.charAt(i));
}
}
}else{
if(str.charAt(i)==' ' || i==str.length()-1 || (i<str.length()-1 && str.charAt(i+1)=='<')){
if(str.charAt(i)==' '){
Collections.reverse(list);
}else{
list.add(str.charAt(i));
Collections.reverse(list);
}
for(int j=0; j<list.size(); j++){
sb.append(list.get(j));
}
if((i<str.length()-1 && str.charAt(i+1)=='<')){
list.clear();
}else{
sb.append(' ');
list.clear();
}
}else{
list.add(str.charAt(i));
}
}
}
System.out.print(sb);
}
}
Python
파이썬에는 문자열을 다룰 때 사용하는 유용한 도구들이 내장되어있다.
자바로 풀이할 때 너무 더럽게.. 풀었던 것 같아 파이썬의 특징을 최대한 살려서 풀 수 있는 방법을 찾아봤다.
str = input()
check = False
ans = ""
temp = ""
for i in str:
if check == False:
if i == "<":
check = True
temp = temp + i
elif i == " ":
temp = temp + i
ans = ans + temp
temp = ""
else:
temp = i + temp
else:
temp = temp + i
if i == '>':
check = False
ans = ans + temp
temp = ''
print(ans + temp)
두 가지 언어로 풀이를 진행해 보니 언어들의 장단점이 명확하게 보이고, 언어에 대한 이해도도 높아지는 것 같다.
C와 JavaScript를 배워서 더 많은 언어로 문제풀이를 진행해야겠다.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1927 최소 힙 - Java / Python (0) | 2022.02.13 |
---|---|
[백준] 11279 최대 힙 - Java / Python (0) | 2022.02.13 |
[백준] 18115 카드 놓기 - Java / Python (0) | 2022.02.12 |
[백준] 2504 괄호의 값 - Java / Python (0) | 2022.02.12 |
[백준] 2346 풍선 터뜨리기 - Java / Python (0) | 2022.02.11 |
댓글
이 글 공유하기
다른 글
-
[백준] 1927 최소 힙 - Java / Python
[백준] 1927 최소 힙 - Java / Python
2022.02.13 -
[백준] 11279 최대 힙 - Java / Python
[백준] 11279 최대 힙 - Java / Python
2022.02.13 -
[백준] 18115 카드 놓기 - Java / Python
[백준] 18115 카드 놓기 - Java / Python
2022.02.12 -
[백준] 2504 괄호의 값 - Java / Python
[백준] 2504 괄호의 값 - Java / Python
2022.02.12