반응형
단어 뒤집기
내 코드 (정답)
답은 맞았으나 그렇게 효율적이지는 않은 듯 하다.
import java.util.*;
public class Main {
public String solution(String str){
String answer = "";
int index = str.length();
for(int i = 0; i < str.length(); i++){
answer += str.charAt(index - 1);
index = index -1;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int t = kb.nextInt();
List<String> array = new ArrayList<>();
for (int i =0; i < t ; i++){
String str = kb.next();
array.add(T.solution(str));
}
for(String x : array){
System.out.println(x);
}
}
}
정답 코드
import java.util.*;
public class Main {
public ArrayList<String> solution(int n, String[] str){
ArrayList<String> answer = new ArrayList<>();
for(String x : str){
// StringBuilder - 처음에 만든 객체로 변경되서 메모리 낭비 줄일 수 있다.
String tmp = new StringBuilder(x).reverse().toString();
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String[] str= new String[n];
for (int i =0; i < n ; i++){
str[i] = kb.next();
}
for(String x : T.solution(n, str)){
System.out.println(x);
}
}
}
특정 문자 뒤집기
내 코드 (오답)
for 루프 늪에 빠져버렸다.
Character.isAlphabetic 을 사용해야 한다.
import java.util.*;
public class Main {
public String solution(String str){
String answer = "";
char[] ss = new char[str.length()];
for(int i = 0; i < str.length(); i++){
ss[i] = str.charAt(i);
}
for(int x = 0; x < str.length(); x++){
if(Character.isAlphabetic(str.charAt(x))){
for(int y = str.length() - 1 ; y > -1; y--){
if(Character.isAlphabetic(str.charAt(y))){
ss[x] = str.charAt(y);
ss[y] = str.charAt(x);
if(x != y){
str.substring(x, y);
}
break;
}
}
}
}
for(char x : ss){
answer += x;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine();
System.out.print(T.solution(str));
}
}
정답 코드
import java.util.*;
class Main {
public String solution(String str){
String answer;
char[] s=str.toCharArray();
int lt=0, rt=str.length()-1;
while(lt<rt){
if(!Character.isAlphabetic(s[lt])) lt++;
else if(!Character.isAlphabetic(s[rt])) rt--;
else{
char tmp=s[lt];
s[lt]=s[rt];
s[rt]=tmp;
lt++;
rt--;
}
}
answer=String.valueOf(s);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
System.out.println(T.solution(str));
}
}
중복 문자 제거
indexOf(charAt(i))
처음으로 발견되는 위치와 그 특정 문자의 위치가 같을 때만 추가해주는 로직
import java.util.*;
public class Main {
public String solution(String str){
String answer = "";
// ** indexOf(charAt()) 처음으로 발견되는 위치
for(int i = 0; i < str.length(); i++){
if(str.indexOf(str.charAt(i)) == i) answer += str.charAt(i);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
반응형
'CS 기초 > 알고리즘 · 문제풀이' 카테고리의 다른 글
[JAVA] Array(1, 2차원 배열) - 피보나치 수열 / 소수(에라토스테네스 체) / 뒤집은 소수 (0) | 2022.02.27 |
---|---|
[JAVA] Array(1, 2차원 배열) - 큰 수 출력하기 / 보이는 학생 / 가위 바위 보 (0) | 2022.02.26 |
[JAVA] 문자열(String) - 가장 짧은 문자거리 / 문자열 압축 / 암호 (0) | 2022.02.26 |
[JAVA] String(문자열) - 회문 문자열 / 유효한 팰린드롬 / 숫자만 추출 (0) | 2022.02.19 |
[JAVA] 문자열(String) - 문자 찾기 / 대소문자 변환 / 문장 속 단어 (0) | 2022.02.12 |