2024. 7. 5. 15:15ใ๐์๊ณ ๋ฆฌ์ฆ ํผ๋๋ฐฑ/์ฝํ ๊ด๋ จ ๊ฐ์ข

-[ํต๊ณผ]
import java.io.*;
public class Main {
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine()); // ์ด ๋ถ๋ถ ์ ๋ฆฌ
for(int i=0; i< num; i++){
//StringBuilder ์ฌ์ฉ
String str = br.readLine();
StringBuilder sb = new StringBuilder();
for(int j=0; j< str.length();j++){
sb.append(str.charAt(str.length()-j-1)); //๋ฌธ์์ด ๋ค์ง๊ธฐ
}
System.out.println(sb);
}
}
public static void main(String[] args)throws Exception {
new Main().solution();
}
}
InputStreamReader๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฌธ์ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ค.
[String vs. StringBuffer vs. StringBuilder ์ ๋ฆฌ]
- String : ๋ถ๋ณ(immutable)ํ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค์ด๋ค. ์ฆ, String ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด, ๊ทธ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค! -> ์๋ก์ด ๊ฐ์ฒด๋ก ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋จ
- StringBuffer : ๊ฐ๋ณํ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค์ด๋ค. ์ฆ, ์๋ก์ด ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ฉด, ๊ธฐ์กด์ ๊ฐ์ฒด๋ก ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋๋ค
- StringBuilder : ๊ฐ๋ณํ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค ์ด๋ค. StringBuffer์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ก์ด๋ฌธ์์ด ์ถ๊ฐ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด, ๊ธฐ์กด์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ์ด ๋๋ค.
- StringBuffer์ ๋ค๋ฅด๊ฒ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ์ ์ด์ง ์์ผ๋ฉฐ, StringBuilder๋ ์ฑ๊ธ์ฐ๋ ๋ ํ๊ฒฝ์์ StringBuffer๋ณด๋ค ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ๊ฐ์ง๋ค
- ๋ถ๋ณ(immutable) ํ ํด๋์ค
-> ์ต์กฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ต์ด ์์ฑํ ๊ฐ์ฒด์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ค์ ์์ฑ์ด ๋์ด ๊ตฌ์ฑ๋๋ค
-> Java์์๋ String,Float,Double, Long, Short, Byte, Character, BigDecimal, BigInteger ๋ฑ์ ํด๋์ค๊ฐ ๋ถ๋ณ ํด๋์ค์ด๋ค.
- ๊ฐ๋ณ(mutable) ํ ํด๋์ค
-> ์ต์ด ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ๋ค, ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ต์ด ์์ฑํ ๊ฐ์ฒด์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด ๊ตฌ์ฑ๋๋ค.
-> Java์๋ StringBuffer, StringBuilder, ArrayList, LinkedList, HashMap, HashSet, TreeMap, TreeSet ๋ฑ์ ํด๋์ค๊ฐ ๊ฐ๋ณ ํด๋์ค์ ์ํ๋ค.
- ์ฑ๊ธ ์ฐ๋ ๋
-> ํ๋์ ์ฝ๋ ๋ธ๋ก์ ์คํํ๋ ๋์ ๋ค๋ฅธ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋์ง ์๋ ๊ฒฝ์ฐ์ด๋ค. ์ฆ, ๋์์ ํ๋์ ์์ ๋ง ์คํํ ์ ์๋ค
- ๋ฉํฐ์ฐ๋ ๋
->๋ ๊ฐ ์ด์์ ์ฐ๋ ๋๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ ๋งํ๋ค. ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ ๋ธ๋ก์ด ๋์์ ์คํ๋ ์ ์์ผ๋ฏ๋ก ,๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ(SynChronization)๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฝ(lock)๊ณผ ์ธ๋ฝ(unlock) ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋๋ค.
| ์ฐจ์ด์ | String | StringBuffer | StringBuilder |
| ์ ์ธ ๋ฐฉ์ | String str = "Hello"; | StringBuffer sb = new StringBuffer("Hello"); | StringBuilder sb = new StringBuilder("Hello"); |
| ๋ฌธ์์ด ๋ณ๊ฒฝ ๋ฐฉ๋ฒ | str += "World"; | sb.append("World"); | sb.append("World"); |
| ํด๋์ค ์ข ๋ฅ | ๋ถ๋ณ(immutable)ํ ํด๋์ค | ๊ฐ๋ณ(mutable)ํ ํด๋์ค | ๊ฐ๋ณ(mutable)ํ ํด๋์ค |
| ๋ณ์์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ ์ ๋ฉ๋ชจ๋ฆฌ ์ฑ๋ฅ |
๋ถ๋ฆฌํจ | ์ ๋ฆฌํจ | ์ ๋ฆฌํจ |
| ๋จ์ผ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฑ๋ฅ | ์์ ์ | ์์ ์ | ์์ ์ |
| ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฑ๋ฅ | ์์ ์ | ์์ ์ , ๋๊ธฐํ ๊ณผ์ ์์ ์ฑ๋ฅ ์ ํ | ์์ ์ , ๋๊ธฐํ ๊ณผ์ ์์ ์ฑ๋ฅ์ ํx |
| ์๋ | ๋งค์ฐ ๋๋ฆผ | ๋น ๋ฆ | ๋น ๋ฆ |
| ์ฌ์ฉ๋ชฉ์ | ๋ฌธ์์ด ์ถ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค | ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด์ ๋ณ์์ ์ถ๊ฐ์ ๋ณ๊ฒฝ์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉด ์ข๋ค. | ๋จ์ผ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด์ ๋ณ์์ ์ถ๊ฐ์ ๋ณ๊ฒฝ์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉด ์ข๋ค. |
[String -> StirngBuffer/ StirngBuilder ํ์ ์ผ๋ก ๋ณ๊ฒฝ ๋ฐฉ๋ฒ]
String str = "Hello World";
//String to StringBuffer
StringBuffer strToSb1 = new StringBuffer(str1);
//String to StringBuilder
StringBuilder strToSb2 = new StringBuilder(str1);
[StringBuffer -> String ๋ณํ ๋ฐฉ๋ฒ] -> String.valueOf() , .toString()
//StringBuffer
StringBuilder sb3 = new StringBuffer("Hello World");
//StringBuffer To String
String str3 = String.valueOf(sb3)
//StringBuilder
StringBuilder sb = new StringBuilder("Hello World");
//StringBuilder To String
String str4 = String.valueOf(sb4);
[StringBuilder ์ ๋ฉ์๋]
| ๋ฉ์๋ | ๋ฐํ ํ์ | ์ค๋ช |
| .append() -> String, char[] , Object, boolean, char,int, long, float, double ๋ฑ ์ฐ๊ฒฐ ๊ฐ๋ฅ |
StringBuilder | ๊ฐ์ ์ฐ๊ฒฐ |
| .appendCodePoint(int codePoint) | StringBuilder | ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๋ง๋ถ์ธ๋ค |
| .delete(int start , int end) | StringBuilder | ์ง์ ๋ ๋ฒ์์ ๋ฌธ์๋ฅผ ์ญ์ |
| .deletedCharAt(int index) | StringBuilder | ์ง์ ๋ ์์น์ ๋ฌธ์๋ฅผ ์ญ์ |
| .insert(int offset, String str) | StringBuilder | ๋ฌธ์์ด์ ์ฝ์ ํ๋ค. |
| .insert(int offset, char[] str) | StringBuilder | ๋ฌธ์ ๋ฐฐ์ด์ ์ฝ์ ํ๋ค |
| .reverse() | StringBuilder | ๋ฌธ์์ด์ ๋ค์ง๋๋ค |
| .replace(int start, int end, String str) | StringBuilder | ์ง์ ๋ ๋ฒ์์ ๋ฌธ์๋ฅผ ์ ๋ฌธ์์ด๋ก ๋์ฒดํ๋ค |
| .setCharAt(int index, char ch) | void | ์ง์ ๋ ์์น์ ๋ฌธ์๋ฅผ ์ค์ ํ๋ค |
| .setLength(int newLength) | void | ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ค์ ํ๋ค |
| .substring(int start) | String | ์ง์ ๋ ์์ ์์น๋ถํฐ ๋ฌธ์์ด ๋๊น์ง ๋ฐํํ๋ค |
| .substring(int start , int end) | String | ์ง์ ๋ ๋ฒ์์ ๋ฌธ์์ด์ ๋ฐํํ๋ค |
| .trimToSize() | void | ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ธธ์ด์ ๋ฐ๋ผ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ |
[๊ฐ์ข์์ ์ ์ํ ํ์ด]
=> .reverse() ๋ฉ์๋ ํ์ฉ
class Main {
public ArrayList<String> solution(int n,String[] str){
ArrayList<String> answer = new ArrayList<>();
for(String x : str){
String tmp = new StringBuilder(x).reverse().toString();
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] str = new String[n];
for(int i=0;i<n;i++){
str[i]= br.readLine();
}
for(String x : T.solution(n,str)){
System.out.println(x);
}
}
}
[Java] String, StringBuffer, StringBuilder ์ดํดํ๊ธฐ
ํด๋น ํ์ด์ง์์๋ String๊ณผ StringBuffer, StringBuilder์ ๋ํด์ ์ดํดํ๊ณ ๊ฐ๊ฐ์ ์ฐจ์ด์ ๊ณผ ์ธ์ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํด ์ดํดํ๊ธฐ ์ํ ๊ธ์ ๋๋ค. 1) String, StringBuffer, StringBuilder ๐ก String์ด๋? - Java์
adjh54.tistory.com
[์ถ์ฒ]