[Java] Lv1_ 문자열 내 p와 y의 개수/자릿수 더하기/자연수 뒤집어 배열로 만들기/정수 내림차순

Updated:

Categories:

Tags: ,

📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]

문자열 내 p와 y의 개수 (Lv1, 정답률 87%)

programmers 문제

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    boolean solution(String s) {

        String str = s.toLowerCase();

        int countP = 0;
        int countY = 0;

        for(char c : str.toCharArray()){
            if(c=='p'){
                countP++;
            }

            if(c=='y'){
                countY++;
            }
        }

        return countP==countY;
    }
}
  • 처음에 String str = s.toLowerCase(); 이 부분에서 변수에 할당하지 않고s.toLowerCase();만 선언했는데, 테스트 케이스는 통과했지만 최종 테스트에서는 통과하지 않음
  • 변수에 할당하지 않으면 원본 문자열 s가 변경되지 않아서 꼭 할당해야함.

자릿수 더하기(Lv1, 정답률 87%)

Programmers 문제

나의 풀이

처음 푼 풀이

원래 10으로 나눠서 나머지를 하면 되지 않을까 했는데 풀다 보니 이 방법도 있네 하고 이제 형변환을 이용해서 풀었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer =0;
        String str= n+"";
        
        for(char c : str.toCharArray()){
           answer+=Integer.parseInt(String.valueOf(c));
        }
        
        return answer;
    }
}

보기에 직관적이고 간결해서 좋았는데 나머지로 구하는 방식도 할 줄 알아야 될 것 같아서 다시 도전함.
for문을 돌면서 풀려고 했는데 자꾸 길어져서 중간에 포기하다가
다른 사람 풀이 보니까, while 쓸 생각을 안해봤었다,,,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer =0;
        
        while(n>0){
            answer += n % 10;
            if(n < 10) {
                break;
            }
            
           n = n / 10;
        }
        return answer;
    }
}

형변환으로 함수를 사용한 것보다는 이 방법이 효율이 더 좋다고 하는데
나는 직관적인 것도 중요하다고 생각,,,!하지만.. 코테에선 중요하겟지….

자연수 뒤집어 배열로 만들기(Lv1, 정답률 87%)

Programmers 문제

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int[] solution(long n) {
        int length = Long.toString(n).length();
        int[] answer = new int[length];
        for(int i = 0; i< length ; i++) {
            answer[i]= (int)n % 10;
            n=n/10;
        }
        return answer;
    }
}
  • 처음에는 answer[i]= (int)n % 10; 로 적고 제출했는데 테스트 케이스는 통과했으나 최종 제출하니까 몇 개에서 에러가 발생함.
  • (int)(n%10) 으로 했을 때 해결되었는데 찾아보니까
  • (int) n%10으로 하게 되면 형 변환이 n만 이루어져서 long값이 int를 초과하는 경우에는 잘못된 값이 나올 수 있다고 함, 변환된 다음에 %10을 수행하게 된다.
  • (int)(n%10) 을 할 경우에는 n%10을 먼저 계산한 다음 형 변환이 수행되기 때문에 괄호로 감싸주는 것이 맞다.

정수 내림차순으로 배치하기 (Lv1, 정답률 87%)

Programmers 문제

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;

class Solution {
    public long solution(long n) {
        String answer ="";
        
        String str = Long.toString(n);
        
      char[] chars = str.toCharArray();
        Arrays.sort(chars);
        
        for(int i = chars.length-1 ; i >= 0 ; i--){
            answer+=chars[i];
        }

        
        return Long.parseLong(answer);
    }
}

처음에 Arrays.sort(chars, Collections.reverseOrder());로 했는데 실패함..!
객체 타입 일 때만 가능하기 때문 , 아래와 같이 수정하면 잘 동작한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;

class Solution {
    public long solution(long n) {
        
        String answer = "";
        String str = Long.toString(n);
        
        String[] strArr = str.split("");
        Arrays.sort(strArr,Collections.reverseOrder());
        for(String a: strArr){
           answer+= a;
        }
        return Long.parseLong(answer); 
       
    }
}

StringBuilder 공부하기! SpringBuiledr 공부 완료

Programmers 카테고리 내 다른 글 보러가기

Leave a comment