알고리즘

10월 12일 2문제 - Java

3. 문장 속 단어

한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.

*문장속의 각 단어는 공백으로 구분됩니다.

*가장 길이기 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 한다.

 

*subString , split 의 차이점*

subString - index를 설정해서 문자열을 자를 수 있다.

split - 특정문자를 기준으로 문자열을 잘라 문자열배열에 넣어준다.

 

import java.util.Scanner;

public class Main {

  public String solution(String sentence) {
    String result = "";
    String[] world = sentence.split(" ");
    for (String x : world) {
      if (result.length() < x.length()) {
        result = x;
      }
    }
    return result;
  }

  public static void main(String[] args) {
    Main main = new Main();
    Scanner sc = new Scanner(System.in);
    String sentence = sc.nextLine();
    System.out.println(main.solution(sentence));
  }
}

subString, indexOf 사용해보기

 

indexOf 해당 문자가 몇번 째 index에 있는지 return . 없으면 -1

String result = "";
    int position = 0;
    // 공백이 없을 때 까지 실행
    while ((position = sentence.indexOf(" ")) != -1) {
    // 0 ~ position 까지 
      String world = sentence.substring(0, position);
      if (world.length() > result.length()) {
        result = world;
      }
      // position+1 부터 잘라서 sentence 초기화
      sentence = sentence.substring(position + 1);
    }

	// 마지막 단어 즉 공백이 없을 경우도(while문을 빠져나온 상태) 확인 해준다.
    if (sentence.length() > result.length()) result = sentence;
    return result;

 

 

4. 단어 뒤집기

N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.

 

Stack으로 해보려다가 for문이 많아져서 맘에 안들어서 변경...

 

1. StringBuilder 를 사용한 이후 ?

String 을 사용하면 작업을 할때 객체가 계속해서 만들어진다. (무거워짐)

String 계산이 많아지면 Builder를 사용한다.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test1_04 {

  public ArrayList<String> solution(int number, String[] stringArray) {

    ArrayList<String> arrayList = new ArrayList<>();

    for(String x : stringArray){
      String tmp = new StringBuilder(x).reverse().toString();
      arrayList.add(tmp);
    }


    return arrayList;

  }

  public static void main(String[] args) {
    Test1_04 main = new Test1_04();
    Scanner sc = new Scanner(System.in);
    int number = sc.nextInt();
    String[] str = new String[number];
    for (int i = 0; i < str.length; i++) {
      str[i] = sc.next();
    }
    for(String x : main.solution(number,str)){
      System.out.println(x);
    }
  }
}

 

직접 바꾸기

1. 문자를 toCharArray() 를 이용하여 배열에 넣어주고 글자가 짝수/ 홀수 로 나누었을 때를 활용하였다.

짝수일 때는 길이 보다 작을 경우 앞에 있는 index(p) 와 뒤에있는 index(m) 을 서로 바꿔준다. ( tmp를 이용하여 미리 하나 담아두어야 이미 바뀐 문자가 들어가지 않는다)

import java.util.ArrayList;
import java.util.Scanner;

public class Test1_04 {

  public ArrayList<String> solution(String[] stringArray) {

    ArrayList<String> arrayList = new ArrayList<>();

    for (String x : stringArray) {

      char[] ch = x.toCharArray();

      // 짝수일 때
      int p = 0;
      int m = ch.length - 1;
      if (ch.length % 2 == 0) {
        while (p < m) {
          char tmp = ch[m];
          ch[m] = ch[p];
          ch[p] = tmp;
          p++;
          m--;
        }
        // 홀수일 때
      } else {
        System.out.println("여긴 들어와?");
        while (p != m) {
          char tmp = ch[m];
          ch[m] = ch[p];
          ch[p] = tmp;
          p++;
          m--;
        }
      }
      arrayList.add(String.valueOf(ch));
    }

    return arrayList;
  }

  public static void main(String[] args) {
    Test1_04 main = new Test1_04();
    Scanner sc = new Scanner(System.in);
    int number = sc.nextInt();
    String[] str = new String[number];
    for (int i = 0; i < str.length; i++) {
      str[i] = sc.next();
    }
    for (String x : main.solution(str)) {
      System.out.println(x);
    }
  }
}

'알고리즘' 카테고리의 다른 글

10월 14일 2문제 - Java  (0) 2021.10.14
10월 13일 2문제 - Java  (0) 2021.10.13
10월 11일 2문제 - Java  (0) 2021.10.12
[프로그래머스] 하샤드 수  (0) 2021.05.11
[프로그래머스] 핸드폰 번호 가리기  (0) 2021.05.10