728x90
반응형
SMALL

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

입출력 예

A B result

"hello" "ohell" 1
"apple" "elppa" -1
"atat" "tata" 1
"abc" "abc" 0

입출력 예 설명

입출력 예 #1

  • "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.

입출력 예 #2

  • "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.

입출력 예 #3

  • "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.

입출력 예 #4

  • "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.

문자 끝 글자만 잘라 a에 대입한다.

끝 글자와 0부터 끝 글자 전까지 자른 문자를 더한다.

A 길이만큼 반복한다.

✩만약 copy 문자와 B가 같다면 answer(문자를 민 횟수)를 리턴하고 없다면 -1을 리턴한다.

→ 이걸 하지 않아서 테스트 케이스 2번 실패 전체 5번 6번 실패 했었음


package Lv0;

public class H120921 {
	public static int solution(String A, String B) {
		int answer = 0;
		String copy = A;
		for (int i = 0; i < A.length(); i++) {
			if (copy.equals(B)){
				return answer;
			}
			String a = copy.substring(copy.length() -1);
			copy = a + copy.substring(0, copy.length() -1);
			answer++;
		}
		return -1;
	}
	public static void main(String[] args) {
		String A = "hello";
		String B = "ohell";
		System.out.println(solution(A, B));
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

숨어있는 숫자의 덧셈 (2)  (0) 2023.03.19
잘라서 배열로 저장하기  (0) 2023.03.18
k의 개수  (0) 2023.03.16
유한소수 판별하기  (0) 2023.03.15
다항식 더하기  (1) 2023.03.15
728x90
반응형
SMALL

문제 설명

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

입출력 예

i j k result

1 13 1 6
10 50 5 5
3 10 2 0

입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.

입출력 예 #3

  • 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.

i 부터 j까지 k 가 들어가는 개수 찾기

첫번째 케이스 예시 1 ~ 13까지 1은 총 6번 등장 (1, 10, 11, 12, 13) // 11은 1이 두개!

i부터 j까지 반복문을 돌려 비교하기 쉽게 문자열을 바꾸고

각 숫자단어에 k 와 동일한 값이 들어있는지 확인하고 한 숫자안에 여러번 등장할 가능성이 있기에 단어를 split()으로 쪼개서 확인하기!

package Lv0;

public class H120887 {
	public static int solution(int i, int j, int k) {
		int answer = 0;
		String K = String.valueOf(k);
		for (int l = i; l <= j ; l++) {
			String value = String.valueOf(l);
			if (value.contains(K)) {
				String[] array = value.split("");
				for (String A : array) {
					if (A.equals(K)) answer++;
				}
			}
		}
		return answer;
	}
	public static void main(String[] args){
		int i = 1;
		int j = 13;
		int k = 1;
		System.out.println(solution(i, j, k));
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

잘라서 배열로 저장하기  (0) 2023.03.18
문자열 밀기  (0) 2023.03.17
유한소수 판별하기  (0) 2023.03.15
다항식 더하기  (1) 2023.03.15
7의 개수  (0) 2023.03.13
728x90
반응형
SMALL

문제 설명

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

  • 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.

두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.


제한사항

  • a, b는 정수
  • 0 < a ≤ 1,000
  • 0 < b ≤ 1,000

입출력 예

a b result

7 20 1
11 22 1
12 21 2

입출력 예 설명

입출력 예 #1

  • 분수 7/20은 기약분수 입니다. 분모 20의 소인수가 2, 5 이기 때문에 유한소수입니다. 따라서 1을 return합니다.

입출력 예 #2

  • 분수 11/22는 기약분수로 나타내면 1/2 입니다. 분모 2는 소인수가 2 뿐이기 때문에 유한소수 입니다. 따라서 1을 return합니다.

입출력 예 #3

  • 분수 12/21는 기약분수로 나타내면 4/7 입니다. 분모 7은 소인수가 7 이므로 무한소수입니다. 따라서 2를 return합니다.

Hint

  • 분자와 분모의 최대공약수로 약분하면 기약분수를 만들 수 있습니다.
  • 정수도 유한소수로 분류합니다.

유한소수를 판별하기에 앞서 입력받은 분수가 기약분수의 형태를 갖추어야 한다.기약분수란 더 이상 약분될 수 없는 분수를 뜻한다.

분자와 분모의 최소공배수를 구해 그 수로 나누어주게되면 기약분수를 만들 수 있다.

최소공배수를 구해 새로운 분모인 bottom을 만들어 준다.이 때 유한소수인지 판별하기 위해서 분자는 필요하지않으므로 생성하지않았다.유한소수는 분모의 소인수 (소수이면서 약수인 수)가 2 또는 5인 경우에만 가능하다.

while문을 통해 2, 5로 나누어 떨어지는 경우 각각의 수로 나누어주어 분모의 소인수가 2또는 5로만 구성되어있는지 확인해주도록 구현하였다.


package Lv0;

public class H120878 {
	public static int solution(int a, int b) {
		int bottom = b / gcd(a, b);
		while (bottom != 1) {
			if (bottom % 2 == 0) bottom /= 2;
			else if (bottom % 5 == 0) bottom /= 5;
			else return 2;
		}
		return 1;
	}

	static int gcd(int a, int b) {
		if (a < b) {
			int temp = a;
			a = b;
			b = temp;
		}

		if (b == 0) return a;
		return gcd(b, (a % b));
	}
	public static void main(String[] args){
		int a = 7;
		int b = 20;
		System.out.println(solution(a, b));
	}
}

다른 사람 풀이

class Solution {
    public int solution(int a, int b) {
        int answer = ((a*1000)%b == 0) ? 1 : 2;
        return answer;
    }
}

어떻게 이렇게 간단하게 풀 수 있는걸까…? 공부해봐야할 것 같다.

728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

문자열 밀기  (0) 2023.03.17
k의 개수  (0) 2023.03.16
다항식 더하기  (1) 2023.03.15
7의 개수  (0) 2023.03.13
저주의 숫자 3  (0) 2023.03.12

+ Recent posts