본문 바로가기
Algorithm/CODINGBAT[Java]

CodingBat String-1

by 씨니 2021. 9. 27.
728x90

이번 CodigBat문제는 String관련 문제들!

String에서 java.util.regex.Pattern.matches가 많이 사용됨!

주의해서 일반적인 코딩방법과, Pattern.matches를 사용하는 방법을 살펴보자!

 

1. helloName

주어진 문자열에 "Hello "문자열을 문자열 앞에 추가해 출력

public String helloName(String name) {
  return "Hello " + name + "!";
}

 

2. makeAbba

주어진 두개의 문자열a,b를 abba형식으로 반환해라.

public String makeAbba(String a, String b) {
  return a+b+b+a;
}

 

3. makeTags

주어진 두개의 문자열 tag와 word를 사용해 <tag>word</tag>형식으로 반환해라.

public String makeTags(String tag, String word) {
  return "<"+tag+">"+word+"</"+tag+">";
}

 

4. makeOutWord

주어진 out문자열을 반으로 나누어 word문자열을 감싸는 형식으로 출력할것

ex) out : <<>>, word: word => <<word>>

public String makeOutWord(String out, String word) {
  return out.substring(0,2) + word + out.substring(2,out.length());
}

 

5. extraEnd

주어진 문자열에서 마지막 2개 문자들을 세번 반복해서 출력해라. 만약 주어진 문자열길이가 3보다 2보다 작다면 

그냥 그 문자열을 세번 반복해서 출력할 것.

public String extraEnd(String str) {
  if(str.length() > 2){
    str = str.substring(str.length()-2);
  }
  return str + str + str;
}

 

6. firstTwo

주어진 문자열에서 앞에서 두번째 문자까지 출력할것. (str.length()를 사용해서 == 문자열길이함수)

public String firstTwo(String str) {
  if(str.length() > 1){
    str = str.substring(0,2);
  }
  return str;
}

 

7. firstHalf

주어진 문자열을 반으로 나누어 앞 문자열을 출력할것. ex) "WooHoo" -> "Woo"

public String firstHalf(String str) {
  return str.substring(0,str.length()/2);
}

 

8. withoutEnd

주어진 문자열의 첫번째와 마지막 문자를 제거해서 출력해라.

public String withoutEnd(String str) {
  return str.substring(1,str.length()-1);
}

 

9. comboString

주어진 두개의 문자열의 길이를 비교해 짧은 문자열 + 긴 문자열 + 짧은 문자열 형태로 출력해라.

public String comboString(String a, String b) {
  if(a.length() > b.length()){
    String s = a;
    a = b;
    b = s;
  }
  return a + b + a;
}

 

10. nonStart

주어진 두개의 문자열의 각각의 가장 앞글자를 제외하고 합쳐서 출력

public String nonStart(String a, String b) {
  return a.substring(1) + b.substring(1);
}

 

11. left2

주어진 문자열 길이가 2보다 클때, 문자열 인덱스 2번부터 끝까지 출력 + 인덱스0~1까지 출력.

public String left2(String str) {
  if(str.length() > 2){
    str = str.substring(2) + str.substring(0,2);
  }
  return str;
}

 

12. right2

주어진 문자열에서 마지막 문자열 2문자들을 먼저출력후 나머지 문자열을 출력해라.

public String right2(String str) {
  if(str.length() > 2){
    str = str.substring(str.length()-2) + str.substring(0,str.length()-2);
  }
  return str;
}

 

13. theEnd

주어진 문자열과 boolean값에서, boolean값이 true이면 주어진 문자열의 가장 앞 문자, boolean값이 false이면 주어진 문자열의 마지막 문자를 출력해라.

public String theEnd(String str, boolean front) {
  if(front){
    return str.substring(0,1);
  }
  return str.substring(str.length()-1);
}

 

14. withoutEnd2

주어진 문자열의 가장 앞글자와 끝글자를 제외해 출력해라.

public String withouEnd2(String str) {
  if(str.length()>2){
    return str.substring(1,str.length()-1);
  }
  return "";
}

 

15. middleTwo

주어진 문자열의 가운데 두글자를 출력해라.

public String middleTwo(String str) {
  return str.substring(str.length()/2 -1, str.length()/2 +1);
}

 

16. endsLy

주어진 문자열 끝이 "ly"로 끝나면 true를 반환해라 - 2가지 방법!

public boolean endsLy(String str) {
  return java.util.regex.Pattern.matches(".*?ly",str);
}
public boolean endsLy(String str) {
  if(str.length() >= 2){
    if(str.charAt(str.length()-2) == 'l' && str.charAt(str.length()-1) == 'y'){
      return true;
    }
  }
  return false;
}

 

17. nTwice

주어진 문자열을 문자열 앞 n만큼 + 문자열 뒤 n만큼, 입력받은 정수형 n만큼 앞뒤를 잘라 출력해라

(ex. str: Hello, word : 2 => Helo)

public String nTwice(String str, int n) {
  return str.substring(0,n) + str.substring(str.length()-n);
}

 

18. twoChar

주어진 문자열을 주어진 정수형부터 끝까지 출력해라. 만약 주어진 정수형이 주어진 문자열길이보다 작거나 더 크면, 주어진 문자열 앞 2개의 문자들을 출력해라.

public String twoChar(String str, int index) {
  if((str.length()-2 < index) || (index < 0)){
    return str.substring(0,2);
  }
  return str.substring(index, index+2);
}

 

19. middleThree

주어진 홀수길이의 문자열의 가운데 3개문자들을 출력해라.(str: candy => and)

public String middleThree(String str) {
  return str.substring(str.length()/2-1, str.length()/2+2);
}

 

20. hasBad

주어진 문자열에서 인덱스 길이 0부터 혹은 1부터 시작해 "bad"문자열 나타난다면 true반환. - 2가지방법

public boolean hasBad(String str) {
  return java.util.regex.Pattern.matches(".?bad.*?",str);
}
public boolean hasBad(String str) {
  String s = "";
  String s2 = "";
  
  if(str.length() >= 3  ){
    s = str.substring(0,3);
  }
  if(str.length() > 3) {
    s2 = str.substring(1,4);
  }
  return s.equals("bad") || s2.equals("bad");
}

 

21. atFirst

주어진 문자열로 길이가 2인 문자열을 만들어라. 길이가 2이상이면 앞 2자리를 반환하고, 2보다 작은 문자열의 경우 @으로 채워서 반환해라.

public String atFirst(String str) {
  if(str.length() == 0){
    return "@@";
  }
  if(str.length() < 2){
    return str + "@";
  }
  return str.substring(0,2);
}

 

22. lastChars

주어진 두개의 문자열 a,b에서 a문자열의 가장 앞글자와 b문자열 가장 뒷글자를 합쳐 출력해라.

만약 a나 b가 비어있는 문자열이라면 @을 채워서 출력해라.

public String lastChars(String a, String b) {
  if(a.equals("") || b.equals("")){
    if(a.equals("") && b.equals("")){
      return "@@";      
    }else if(a.equals("")){
      return "@" + b.charAt(b.length()-1);
    }else{
      return a.substring(0,1) + "@";
    }
  }
  return a.substring(0,1) + b.charAt(b.length()-1);
}

 

23. conCat

주어진 두개의 문자열을 합쳐라. 만약 첫번째 문자열의 마지막 문자와 두번째 문자열의 첫번째 문자가 같은 문자라면, 같은 문자중 하나만 출력해서 합쳐라. 

public String conCat(String a, String b) {
  if(!a.equals("") && !b.equals("")){
    if(a.substring(a.length()-1).equals(b.substring(0,1))){
      return a + b.substring(1,b.length());
    }    
  }
  return a+b;
}

 

24. lastTwo

주어진 문자열의 마지막 2개의 문자들을 서로 바꿔서 출력해라. ex)"coding" -> "codign"

public String lastTwo(String str) {
  if(str.length() > 2){
    return str.substring(0,str.length()-2) + str.charAt(str.length()-1) + str.charAt(str.length()-2);
  }
  if(str.length() == 2){
    return str.substring(str.length()-1) + str.charAt(str.length()-2);
  }
  return str;
}

 

25. seeClolor

주어진문자열이 "red"나 "blue"로 시작한다면 색깔 문자열을 출력하고, 그렇지 않으면 빈 문자열 출력해라

public String seeColor(String str) {
  if(str.length() > 2){
    if(str.substring(0,3).equals("red")){
      return "red";
    }
  }
  if(str.length() > 3){
    if(str.substring(0,4).equals("blue")){
      return "blue";
    }
  }
  return "";
}

 

26. frontAgain

주어진 문자열의 처음 2번째문자들과 끝에서 2번째 문자들이 같으면 true를 출력

public boolean frontAgain(String str) {
  if(str.length()>1){
    if(str.substring(0,2).equals(str.substring(str.length()-2))){
      return true;
    }
  }
  return false;
}

 

27. minCat

두개의 문자열 a,b가 주어지면 둘중에 작은 문자열 길이 만큼 양쪽의 문자열을 출력, but 길이가 더 작은 문자열은 전부 출력하고, 길이가 긴 문자열은 문자열앞쪽부터x, 뒤쪽기준으로 길이가 짧은 문자열 길이만큼 출력해라.

ex) a : "hello", b : "hi" ==> "lohi"

public String minCat(String a, String b) {
  if(a.length() > b.length()){
    return a.substring(a.length()-b.length()) + b;
  }
  if(b.length() > a.length()){
    return a + b.substring(b.length()-a.length());
  }
  return "";
}

 

28. extraFront

주어진 문자열의 앞 2글자를 세번 반복해서 출력해라. 만약 주어진 문자열의 길이가 2보다 작다면 그 문자열을 3번 반복해서 출력해라.

public String extraFront(String str) {
  if(str.length() > 1){
    return str.substring(0,2) + str.substring(0,2) + str.substring(0,2);
  }
  return str + str + str;
}

 

29. without2

주어진문자열의 앞 2글자 뒤2글자가 같다면, 시작 2개문자들 삭제해 출력해라. 만약 문자열길이가 2글자면 앞에서 2글자 뒤에서 2글자 같아 overlap되기때문에 ""빈문자열을 출력해라. 그외의 것들은 변환하지 말고 그대로 출력해라.

public String without2(String str) {
  if((str.length() > 2) && str.substring(0,2).equals(str.substring(str.length()-2))){
    return str.substring(2);
  }
  if(str.length() == 2){
    return "";
  }
  return str;
}

 

30. deFront

주어진 문자열의 앞 2개의 문자들을 제외하고 출력해라. 단, 첫번째 문자가 'a'면 첫번째 문자 제외하지말것, 두번째 문자가 'b'이면 두번째 문자 제외하지 말것.

ex)str: java -> va,  str: away -> aay ,  str: abc -> abc,  str: xbc -> bc

public String deFront(String str) {  
  
  if(str.charAt(0) == 'a' || str.charAt(1)== 'b'){
    if(str.charAt(0) != 'a'){
      return str.substring(1);
    }else if(str.charAt(1) != 'b'){
      return str.charAt(0) + str.substring(2);
    }
      return str;
  }
  return str.substring(2);
}

 

31. startWord

두개의 str과 word문자열이 주어진다. 두개의 문자열 중 짧은 문자열이 긴문자열과 같다면 match라고 함. (but여기서 문자열중 첫번째 문자는 달라도 같다고 함.) 만약 두개의 문자열에서 match일어나면 긴문자열의 match한 부분 출력.

만약 match가 일어나지 않았다면 ""빈 문자열 출력.

ex) str : hip, word : xip --> hip (match일어남),  str : hippo, word : hi --> hi

public String startWord(String str, String word) {
 if(str.length()>= word.length()){
   for(int i = 0; i < word.length(); i++){
     if(str.substring(1,word.length()).equals(word.substring(1))){
       return str.substring(0,word.length());
     }
   }
 }
 return "";
}

 

32. withoutX

주어진 문자열에서 만약 맨앞 혹은 맨뒤 문자가 'x'라면, 맨앞 혹은 맨뒤 'x'문자 제외해서 출력해라. 그렇지 않으면 그대로 문자열을 출력해라.

public String withoutX(String str) {
  if(str.length() > 1){
    if(str.charAt(0) == 'x'){
      if(str.charAt(str.length()-1) == 'x'){
        return str.substring(1,str.length()-1);
      }else{
        return str.substring(1);
      }
    }
    if(str.charAt(str.length()-1) == 'x'){
        return str.substring(0,str.length()-1);
    }else{
      return str;
    }
  }
  return "";
}

 

33. withoutX2

만약 주어진 문자열에서 처음 문자가 'x'거나 2번째 문자가 'x' 혹은 둘다 'x'일경우 'x'문자는 제외하고 문자열을 출력할것.

public String withoutX2(String str) {
  if(str.length() != 0){
    if(str.charAt(0) == 'x'){
      if((str.length() > 1) && (str.charAt(1) == 'x')){
        return str.substring(2);
      }else{
        return str.substring(1);
      }
    }
    if((str.length() > 1) && (str.charAt(1) == 'x')){
      return str.charAt(0) + str.substring(2);
    }
  }
  return str;
}

 

728x90

'Algorithm > CODINGBAT[Java]' 카테고리의 다른 글

CodinBat Array-1  (0) 2021.10.04
CodingBat Map-2  (0) 2021.09.28
CodingBat Map-1  (0) 2021.09.28
CodingBat Warmup-2  (0) 2021.09.27
CodingBat Warmup-1  (0) 2021.09.27