Programmers #19

이강용·2023년 6월 4일
0

Programmers

목록 보기
18/58

크기가 작은 부분문자열

📑 문1) 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.


제한사항

  • 1 ≤ p의 길이 ≤ 18
  • p의 길이 ≤ t의 길이 ≤ 10,000
  • t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

입출력 예

tpresult
"3141592""271"2
"500220839878""7"8
"10203""15"3

입출력 예 설명

입출력 예 #2

  • p의 길이가 1이므로 t의 부분문자열은 "5", "0", 0", "2", "2", "0", "8", "3", "9", "8", "7", "8"이며 이중 7보다 작거나 같은 숫자는 "5", "0", "0", "2", "2", "0", "3", "7" 이렇게 8개가 있습니다.

입출력 예 #3

  • p의 길이가 2이므로 t의 부분문자열은 "10", "02", "20", "03"이며, 이중 15보다 작거나 같은 숫자는 "10", "02", "03" 이렇게 3개입니다. "02"와 "03"은 각각 2, 3에 해당한다는 점에 주의하세요

나의 풀이

package programmers;

public class SubString {
	
	public static int solution(String t, String p) {
        int answer = 0;
        
        for(int i = 0; i < t.length() - p.length() + 1; i++) {
        	String temp = t.substring(i, i+p.length());
        	if(Long.parseLong(temp) <= Long.parseLong(p)) {
        		answer++;
        	}
        }
        return answer;
    }
	
	public static void main(String[] args) {
		solution("3141592","271");
	}

}

나의 생각

Lv.0 -> Lv.1 로 오면서, 정답률이 낮은 문제부터 풀었는데, 역시... step by step이라고 한걸음 씩 나아가는게 맞는거같다.

문제의 요구사항에서 매개변수 String tString p의 자릿수로 짤라 p의 값보다 작거나 같은 것이 나오는 횟수를 구하는 문제이기때문에, 아래와 같이 t를 문제에서 원하는 값으로 가공하는게 중요 포인트였다. p = 271 이므로 271보다 작거나 같은 값을 검출하면 되는줄 알았다.

처음에는 Integer.parseInt로 int형으로 형변환하여 문제를 풀었지만, p의 길이 ≤ t의 길이 ≤ 10,000 제한사항의 조건이 커질 수 있기때문에 이를 해결하기 위해 10자리 수 까지 표현할 수 있는 Integer보다 값의 범위가 보다 큰 Long타입(19자리수)를 사용하였다.

종류설명저장 공간값의 범위(최소값~최대값)
int부호 있는 정수32 bits-2,147,483,648 ~ 2,147,483,647
long부호 있는 정수64 bits-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
if(Long.parseLong(temp) <= Long.parseLong(p)) {
	answer++;
}

나머지가 1이 되는 수 찾기

📑 문2) 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.


제한사항

  • 3 ≤ n ≤ 1,000,000

입출력 예

nresult
103
1211

입출력 예 설명

  • 10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.

  • 12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.


나의 풀이

package programmers;

public class Remain {
	public static int solution(int n) {
        int x = 1;
        while(true) {
        	x++;
        	if(n % x == 1) {
        		break;        		
        	}
        }
        return x;
    }
	
	
	public static void main(String[] args) {
		solution(997);
	}

}

약수의 합

📑 문3) 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.


제한 사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

nreturn
1228
56

입출력 예 설명

  • 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

  • 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.


나의 풀이

package 프로그래머스;

public class SumOfDivisors {
	public static int solution(int n) {
        int answer = 0;
        
        for(int i = n; i > 0; i--) {
        	if(n % i == 0) {
        		answer +=i;
        	}
        }
        System.out.println(answer);
        return answer;
    }
	
	public static void main(String[] args) {
		
		solution(12);
	}
}

x만큼 간격이 있는 n개의 숫자

📑 문4) 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.


제한조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

입출력 예

xnanswer
25[2,4,6,8,10]
43[4,8,12]
-42[-4,-8]

package programmers;

public class SpacedNumber {
	public  static long[] solution(int x, int n) {
        long[] answer = new long[n];
        
        for(int i = 0; i < n; i++) {
        	answer[i] = x*(long)(i+1);
        }
        
        return answer;
    }
	
	public static void main(String[] args) {
		solution(0,2);
	}
}

짝수와 홀수

📑 문5) 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.


제한 조건

  • num은 int 범위의 정수입니다.

  • 0은 짝수입니다.


numreturn
3"odd"
4"even"

나의 풀이

package programmers;

public class OddEven {
	
	public static String solution(int num) {
        
        
        
		return num % 2 == 0 ? "Even" : "Odd";
    }
	
	public static void main(String[] args) {
		solution(0);
	}

}

profile
HW + SW = 1

0개의 댓글