[TIL] - 알고리즘 문제풀이 day2

장동희·2023년 2월 17일
0

TIL

목록 보기
4/16

알고리즘 문제풀이

문제 1:

class Solution {
    public String solution(String s) {
        String answer = "";
        return answer;
    }
}

문제 설명 : 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항 :
1. 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
2.첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

접근방법 :

우선 스트링 배열을 선언하고 split() 매서드를 사용하여 공백을 통해 나눠야겠다고 생각했습니다. 그리고 for문과 if문을 이용하여 접근해보려고 하였고 소문자 대문자 만드는 매서드인 toUpperCase(), toLowerCase()를 사용해봤습니다.

문제풀이 :

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] arr = s.split("");
        int a = 0;
        for(int i = 0; i < arr.length; i ++){
            if(arr[i].equals(" ")){    //공백이라면 a = 0;으로 초기화한다.
                a = 0;
                
            }else if(a % 2 == 0){
                arr[i] = arr[i].toUpperCase();	// 2로 나눴을때 값이 0이면 대문자
                a ++;							// a++ 증감시켜준다
            }else{
                arr[i] = arr[i].toLowerCase();	// 아닐때는 소문자
                a++;
            }
            answer += arr[i];
        }
        return answer;
    }
}

다른사람의 풀이 :


class Solution {
  public String solution(String s) {

        String answer = "";
        int cnt = 0;
        String[] array = s.split("");

        for(String ss : array) {
            cnt = ss.contains(" ") ? 0 : cnt + 1;
            answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase(); 
        }
      return answer;
  }
}

다른사람은 향상된 for문과 대/소문자를 구분하는 매소드 contains() 사용하였고 3항연산자를 통해 가독성을 좋게했습니다. 이 코드를 보고 저는 contains() 라는 대/소문자 구분 메소드를 알게 되었고 훨씬 더 가독성이 좋은 코드로 만들 수 있겠구나라고 생각했습니다.



문제 2:

class Solution {
    public int[] solution(long n) {
        int[] answer = {};
        return answer;
    }
}

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건:
1. n은 10,000,000,000이하인 자연수입니다.

접근방법 :

자연수 n을 뒤집어 각 자리를 원소로 가지는 배열 형태로 만들기위해서 우선 각자리를 원소리가지기위해 for문을 이용하여 10으로 나눈 나머지를 배열에 대입하면 1의자리의 값이 첫번째 인덱스로 들어가겠구나라고 생각하여 접근했습니다.

문제풀이 :

class Solution {
    public int[] solution(long n) {
        String a = n +"";
        int[] answer = new int[a.length()];
        for(int i = 0; n > 0; i++){
            answer[i] += (int)(n % 10);		//answer[0]에 1의자리가 들어가기때문에
            n /= 10;						//뒤집어진 형태로 나온다.
        }
        return answer;
    }
}

오늘의 다짐 :

for문과 if문 배열을 사용하여 문제에 접근하는 방법에 익숙해지고있습니다. 하지만 아직 개념이 부족하며 문제를 좀더 쉽게 해결하기위해서는 더 많은 매소드를 찾아보고 공부를 해야겠다고 느꼈습니다. 아직 어려운 알고리즘 문제를 시도해보지는 못했지만 더 노력하여 점차 실력을 키워나갈것입니다.

0개의 댓글