[Java] Lv1_ 문자열 내 p와 y의 개수/자릿수 더하기/자연수 뒤집어 배열로 만들기/정수 내림차순
Categories: Programmers
Tags: CodingTest, 실습
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
문자열 내 p와 y의 개수 (Lv1, 정답률 87%)
나의 풀이
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%)
나의 풀이
처음 푼 풀이
원래 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%)
나의 풀이
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%)
나의 풀이
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 공부 완료
Leave a comment