내적구하기
class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
// a와 b의 배열 길이는 같기 때문에
// for문을 돌리면서 a의 i번방 값과 b의 i번방 값을 곱해서 곱한 값을
// answer에 더하면서 대입
for(int i = 0; i < a.length; i++){
answer += a[i]*b[i];
}
return answer;
}
}
실행 결과
a | b | result |
[1,2,3,4] | [-3,-1,0,2] | 3 |
[-1,0,1] | [1,0,-1] | -2 |
약수의 개수와 덧셈
// 두 정수 left와 right가 매개변수로 주어집니다.
// left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
// 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(int left, int right) {
int answer = 0;
for(int i = left; i <= right; i++){
int measureNum = measure(i);
// 받아온 약수의 개수가 짝수라면
// answer에 left ~ right까지의 값중
// i의 해당하는 값을 더하면서 대입
if(measureNum % 2 == 0){
answer += i;
}
// 홀수라면 빼면서 대입
else{
answer -= i;
}
}
return answer;
}
// n ~ m까지의 값들을 하나 하나 받아서
// 약수를 구하여 약수가 있다면
// cnt의 값을 증가시켜준 뒤 for문을 다 돌면
// 약수의 개수만큼증가 시켜준 cnt를 리턴해줌
public int measure(int n){
int cnt = 0;
for(int i = 1; i <= n; i++){
if(n % i == 0){
cnt++;
}
}
return cnt;
}
}
실행결과
수 | 약수 | 약수의 개수 | 결과 |
24 | 1,2,3,4,6,8,12,24 | 8 | 52 |
25 | 1,5,25 | 3 | |
26 | 1,2,13,26 | 4 | |
27 | 1,3,9,27 | 4 |
문자열 내림차순으로 배치하기
// 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해
// 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
// s는 영문 대소문자로만 구성되어 있으며,
// 대문자는 소문자보다 작은 것으로 간주합니다.
import java.util.Arrays;
import java.util.Collections;
class Solution {
public String solution(String s) {
String answer = "";
// 받아온 s문자열의 길이만큼의 배열 길이를 가진
// String 빈 배열 만들어줌.
String [] strArr = new String[s.length()];
// 각 방에 한 문자씩 추출하여 넣어줌
for(int i=0; i<strArr.length; i++){
strArr[i] = s.charAt(i)+"";
}
// Arrays.sort와 Collections를 이용하여 내림차순 정렬
Arrays.sort(strArr, Collections.reverseOrder());
// 내림차 순 정렬을 시킨 배열에서 하나씩 뽑아내어
// answer에 대입
for(int i = 0; i < strArr.length; i++){
answer += strArr[i];
}
return answer;
}
}
실행결과
s | return |
"Zbcdefg" | "gfedcbZ" |
부족한 금액 계산하기
// 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다.
// 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서
// 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
// 단, 금액이 부족하지 않으면 0을 return 하세요.
class Solution {
public long solution(int price, int money, int count) {
long answer = -1;
long re = 0;
// 일단 놀이기구를 타는 만큼 price의 n배 시키기 위하여
// for문을 count수와 작거나 같을때 까지 반복시키면서
// price에 1부터 count수 까지의 수를 하나하나 곱하면서
// re에 누적 대입
for(int i = 1; i <= count; i++){
re += price * i;
}
// 가지고 있는 돈에서 누적 대입했던 re를 뺀다.
long result = money - re;
// 가지고 있는 금액보다 많은 돈이 필요하다면
// -가 될 것이기 때문에 -1값이 저장되어있는
// answer에 그 값을 곱해주면서 대입
if(result < 0){
answer *= result;
}
// 금액이 충분하다면 0 리턴
else{
answer = 0;
}
return answer;
}
}
실행결과
price | money | count | result |
3 | 20 | 4 | 10 |
문자열 다루기 기본
// 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수,
// solution을 완성하세요.
// 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
import java.util.regex.Pattern;
class Solution {
public boolean solution(String s) {
boolean answer = true;
// 숫자인지 확인하기 위한 정규식
String reg = ("^[0-9]*$");
// 문자열의 길이가 4 혹은 6이면서 숫자로만 이루어진 문자열이라면
if(Pattern.matches(reg,s) && (s.length() == 4 || s.length() == 6)){
// true 리턴
return answer;
}
else{
// 아니라면 false 리턴
answer = false;
}
return answer;
}
}
실행결과
s | return |
"a234" | false |
"1234" | true |
행렬의 덧셈
// 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행,
// 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아,
// 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = null;
//arr1의 배열길이와 arr2의 배열길이가 500을 넘지 않는다면
if(arr1.length <= 500 && arr2.length <= 500){
// row와 low의 행의 길이와 열의 길이를 담는다.
int row = arr1.length;
int low = arr1[0].length;
answer = new int[row][low];
// arr1과 arr2의 행렬의 길이는 서로 같기 때문에
for(int i = 0; i < row; i++){
for(int j = 0; j < low; j++){
// 각각 행에는 i를 열에는 j를 대입해주며
// arr1과 arr2의 행렬 덧셈의 결과를 answer 행렬에 담아준다.
answer[i][j] = arr1[i][j] + arr2[i][j];
}
}
}
return answer;
}
}
실행결과
arr1 | arr2 | return |
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 최댓값과 최솟값 (0) | 2024.10.28 |
---|---|
[TIL] 9월 24일 (0) | 2024.09.24 |
[TIL] 9월 23일 (4) | 2024.09.23 |
[TIL] 9월 20일 (1) | 2024.09.20 |
[TIL] 9월5일 (2) | 2024.09.05 |