프로그래머스 Java - Day 18 [문자열 수학 조건문 정렬]

6720·2023년 1월 7일
post-thumbnail

[20230107]

👨‍🏫 이번 목표

프로그래머스 코딩테스트 입문 Java로 Day 18 문자열 수학 조건문 정렬 풀기

📒 문제 풀이 (Day 18 문자열 수학 조건문 정렬)

문자열안에 문자열

문자열 str1str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ str1의 길이 ≤ 100
  • 1 ≤ str2의 길이 ≤ 100

입출력 예

str1str2result
"ab6CDE443fgh22iJKlmn1o""6CD"1
"ppprrrogrammers""pppp"2
class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        if (str1.indexOf(str2) == -1) answer = 2;
        else answer = 1;
        
        return answer;
    }
}

제곱수 판별하기

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 1,000,000

입출력 예

nresult
1441
9762
import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        List<Integer> list = new ArrayList<>();
        
        for (int i = 1; (i*i) <= n; i++) {
            list.add(i*i);
        }
        
        int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
        
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == n) answer = 1;
            else answer = 2;
        }
        
        return answer;
    }
}

이거는 배열에 넣지 않아도 방법이 있어보여서 다른 코드를 찾아봄.

class Solution {
    public int solution(int n) {
        int answer = 0;
        Double sqrt = Math.sqrt(n);
        if(sqrt == sqrt.intValue()) {
            answer = 1;
        } else {
            answer = 2;
        }
        return answer;
    }
}

우선 n의 제곱근을 구해 sqrt 변수에 넣음.
그리고 sqrtsqrtintValue()한 값을 비교함.
intValue(): static이 아니며 Integer 객체에서 int형 값을 뽑아내는 메소드임.
Integerint ValueString Value 두 가지가 있음.
이 때, double에서 int를 갈 때 intValue()를 사용한다면 무조건 내림 처리를 함. → 반올림이 하고 싶다면 Math.round() 사용
doubleint를 비교할 때는 소수점에 어떠한 값도 있으면 안될 것.

EX 1) n = 144
sqrt = 12.0
sqrt.intValue() = 12
⇒ result = 1

EX 2) n = 976
sqrt = 31.240998703626616
sqrt.intValue() = 31
⇒ result = 2

세균 증식

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 10
  • 1 ≤ t ≤ 15

입출력 예

ntresult
2102048
715229,376
class Solution {
    public int solution(int n, int t) {
        int answer = n;

        for (int i = 0; i < t; i++) {
            answer *= 2;
        }
        
        return answer;
    }
}

Math.pow()를 사용해서 풀 수 있을 것 같아서 그 부분의 코드를 찾아봄.

참고 링크

class Solution {
	public int solution(int n, int t) {
		return n * (int)Math.pow(2, t);
	}
}

몰랐는데 Math.pow()의 리턴값이 double이라서 (int)를 붙여 int로 바꿔줘야 함.

문자열 정렬하기 (2)

영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 0 < my_string 길이 < 100

입출력 예

my_stringresult
"Bcad""abcd"
"heLLo""ehllo"
"Python""hnopty"
import java.util.*;

class Solution {
    public String solution(String my_string) {
        String answer = "";
        char[] arr = my_string.toCharArray();
        
        
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] <= 90) arr[i] = (char)((int)arr[i] + 32);
        }
        Arrays.sort(arr);
        answer = new String(arr);
        return answer;
    }
}

다른 사람의 풀이를 봤는데 toLowerCase()를 사용함.

import java.util.*;
class Solution {
    public String solution(String my_string) {
        char[] c = my_string.toLowerCase().toCharArray();
        Arrays.sort(c);
        return new String(c);
    }
}

toLowerCase(): 대문자 → 소문자
Arrays.sort는 배열 상태에서만 가능하므로 toCharArray()가 따라와야 함.
collect을 사용한 코드도 있었는데 아직 거기까지의 실력이 아닌 것 같음..

✨ 후기

1) 확실히 남의 코드랑 비교하니깐 + 내 코드의 공통점들을 보니깐 무조건 반복문에 가두는 게 좋은 방법은 아니라는 걸 깨달았다. 문법 공부를 좀 해야겠다.

2) 기록표

profile
뭐라도 하자

0개의 댓글