정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
return answer;
}
}
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
if(arr.length==1) return new int[]{-1};
int loc = 0;
for(int i = 0; i < arr.length ; i++){
if(arr[i]<arr[loc])
loc = i;
}
int index = 0;
answer = new int[arr.length - 1];
for(int i = 0; i < arr.length ; i++) {
if(i==loc) continue;
answer[index++] = arr[i];
}
return answer;
}
}
문제 푸는 과정
arr의 길이가 1이면 -1을 담은 배열을 return 한다.arr 배열 중 가장 작은 값이 담긴 위치를 찾는다.arr의 값을 넣는다.arr의 길이가 1인 배열이면 가장 작은 수를 제거했을 때 배열의 길이 0이 된다. 따라서 -1을 바로 return 해준다.
가장 작은 값이 있는 배열의 위치를 찾기 위해 loc을 선언한다. arr의 값이 loc 방의 값보다 작으면 loc은 arr의 현재 위치로 바꿔준다.
새로운 배열 answer은 작은 수를 제거한 배열이기 때문에 arr보다 1이 작은 길이로 선언해준다. index는 answer 배열의 방번호를 나타내는 변수이다. arr은 i를 통해 방번호를 찾아준다. 이때 i와 loc이 같다면 해당 값은 가장 작은 값이기 때문에 continue를 사용해 해당 값은 넣지 않고 넘긴다.
문제 링크 🔗 : 제일 작은 수 제거하기
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
numbers의 길이 ≤ 9numbers의 모든 원소 ≤ 9numbers의 모든 원소는 서로 다릅니다.class Solution {
public int solution(int[] numbers) {
int answer = -1;
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
for(int i=0; i<10; i++)
answer+=i;
for(int i=0; i<numbers.length; i++)
answer-=numbers[i];
return answer;
}
}
문제 푸는 과정
numbers에 들어있는 값을 뺀다.0~9까지 숫자 중 없는 수의 합을 구하기 때문에 반대로 생각해보면 없는 수의 합은 0~9까지의 합 중에서 있는 수를 빼면 된다.
문제 링크 🔗 : 없는 숫자 더하기
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
left ≤ right ≤ 1,000class Solution {
public int solution(int left, int right) {
int answer = 0;
return answer;
}
}
class Solution {
public int solution(int left, int right) {
int answer = 0;
for(int i=left; i<=right; i++){
int count = 0;
for(int j=1; j<=i; j++){
if(i%j == 0) count++;
}
if(count%2==0) answer+=i;
else answer-=i;
}
return answer;
}
}
문제 푸는 과정
left에서 right까지 돌린다.left에서 right 사이에 있는 수에 약수가 있다면 count를 증가한다.count가 짝수라면 수를 더하고 아니면 뺀다.left와 right의 사이에 수는 i이고, j는 i의 약수를 구하기 위해 필요한 수이다. 만약 i가 j로 나눠진다면 j가 약수이기 때문에 count를 증가시킨다. i의 약수를 모두 구하고 나면 count의 홀짝여부를 판단하여 계산한다.
문제 링크 🔗 : 약수의 개수와 덧셈
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다
seoul은 길이 1 이상, 1000 이하인 배열입니다.seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.seoul 안에 포함되어 있습니다.class Solution {
public String solution(String[] seoul) {
String answer = "";
return answer;
}
}
import java.util.*;
class Solution {
public String solution(String[] seoul) {
return "김서방은 "+Arrays.asList(seoul).indexOf("Kim")+"에 있다";
}
}
문제 푸는 과정
seoul을 배열에서 list 형태로 바꾼다.list에서 "kim"의 위치를 찾는다.Array인 seoul을 list로 바꾸기 위해 Arrays.asList()를 사용한다. 그 이유는 list의 요소값의 위치를 반환해주는 indexOf()를 사용하기 위해서이다.
문제 링크 🔗 : 서울에서 김서방 찾기
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
phone_book의 길이는 1 이상 1,000,000 이하입니다.class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
return answer;
}
}
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for(int i=1; i<phone_book.length; i++){
if(phone_book[i].startsWith(phone_book[i-1])){
return false;
}
}
return true;
}
}
문제 푸는 과정
phone_book을 정렬한다.phone_book을 비교하며 만약 phone_book의 값이 그전 값으로 시작한다면 false를 return 한다.phone_book을 정렬하는 이유는 문자열 배열은 문자열의 길이로 정렬하기 때문이다. 따라서 길이가 작은 값이 앞쪽으로 정렬된다. 길이가 작을수록 앞에 있기 때문에 그 뒤의 값에 접두어일 확률이 올라간다. 접두어는 길이가 더 짧아야 하기 때문이다.
phone_book의 값이 접두어인지 확인하기 위해서 startsWith()을 사용했다. 이때 접두어인지 확인해야하기 때문에 인수로 더 작은 값을 넘겼다. 함수의 반환값이 true일 경우 접두어이기 때문에 false를 return 한다.
문제 링크 🔗 : 전화번호 목록
전구 이모지를 붙여서인지 전 글 보다 보는 재미가 더 생긴 것 같아요!