배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1]입니다. (n은 a, b의 길이) 제한사항
a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
입출력 예
입출력 예 설명 입출력 예 #1
a와 b의 내적은1*(-3) + 2*(-1) + 3*0 + 4*2 = 3입니다.
입출력 예 #2
a와 b의 내적은(-1)*1 + 0*0 + 1*(-1) = -2입니다.
풀이
class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
int[] c = new int[a.length];
for(int i=0; i<a.length; i++){
c[i] = a[i] * b[i];
answer += c[i];
}
return answer;
}
}
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요. 제한사항
전체 학생의 수는 2명 이상 30명 이하입니다.
체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
입출력 예
입출력 예 설명 예제 #1 1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다. 예제 #2 3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다. 문제가 잘 안풀린다면😢힌트가 필요한가요? [코딩테스트 연습 힌트 모음집]으로 오세요! →클릭 출처 ※ 공지 - 2019년 2월 18일 지문이 리뉴얼되었습니다. ※ 공지 - 2019년 2월 27일, 28일 테스트케이스가 추가되었습니다. ※ 공지 - 2021년 7월 28일 테스트케이스가 추가되었습니다. ※ 공지 - 2021년 8월 30일 테스트케이스가 추가되었습니다.
풀이
public static int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
//여벌 체육복을 가져온 학생이 도난당한 경우
for(int i=0; i<lost.length; i++) {
for(int j=0; j<reserve.length; j++) {
if(lost[i] == reserve[j]) {
answer++;
lost[i] = -1;
reserve[j] = -1;
break;
}
}
}
// 도난당한 학생에게 체육복을 빌려주는 경우
for(int i=0; i<lost.length; i++) {
for(int j=0; j<reserve.length; j++) {
//여벌 체육복을 가져온 학생이 자기번호 앞, 뒤 학생에게 체육복을 빌려줌
if((lost[i]-1 == reserve[j]) || (lost[i]+1 == reserve[j])){
answer++;
reserve[j] = -1;
break;
}
}
}
return answer;
}
public static void main(String[] args) {
int a = 5;
int[] a2 = {2, 4};
int[] a3 = {1, 3, 5};
System.out.println(solution(a, a2, a3));
int b = 5;
int[] b2 = {2, 4};
int[] b3 = {3};
System.out.println(solution(b, b2, b3));
int c = 3;
int[] c2 = {3};
int[] c3 = {1};
System.out.println(solution(c, c2, c3));
}
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.
다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉, 2번 이상 신고당하면 이용 정지)인 경우의 예시입니다.
각 유저별로 신고당한 횟수는 다음과 같습니다. 위 예시에서는 2번 이상 신고당한 "frodo"와 "neo"의 게시판 이용이 정지됩니다. 이때, 각 유저별로 신고한 아이디와 정지된 아이디를 정리하면 다음과 같습니다.
따라서 "muzi"는 처리 결과 메일을 2회, "frodo"와 "apeach"는 각각 처리 결과 메일을 1회 받게 됩니다. 이용자의 ID가 담긴 문자열 배열id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열report, 정지 기준이 되는 신고 횟수k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 제한사항
2 ≤id_list의 길이 ≤ 1,000
1 ≤id_list의 원소 길이 ≤ 10
id_list의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있습니다.
id_list에는 같은 아이디가 중복해서 들어있지 않습니다.
1 ≤report의 길이 ≤ 200,000
3 ≤report의 원소 길이 ≤ 21
report의 원소는 "이용자id 신고한id"형태의 문자열입니다.
예를 들어 "muzi frodo"의 경우 "muzi"가 "frodo"를 신고했다는 의미입니다.
id는 알파벳 소문자로만 이루어져 있습니다.
이용자id와 신고한id는 공백(스페이스)하나로 구분되어 있습니다.
자기 자신을 신고하는 경우는 없습니다.
1 ≤k≤ 200,k는 자연수입니다.
return 하는 배열은id_list에 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.
입출력 예 설명 입출력 예 #1 문제의 예시와 같습니다. 입출력 예 #2 "ryan"이 "con"을 4번 신고했으나, 주어진 조건에 따라 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리합니다. 따라서 "con"은 1회 신고당했습니다. 3번 이상 신고당한 이용자는 없으며, "con"과 "ryan"은 결과 메일을 받지 않습니다. 따라서 [0, 0]을 return 합니다.
풀이
중복 신고를 제거하기 위해서 HashMap과 HashSet을 사용했습니다.
Set : 데이터를 중복 저장할 수 없음
HashSet : Set 인터페이스를 사용, 중복된 값을 저장할 수 없음, put() 메소드를 사용해 데이터를 저장
HashMap : Map 인터페이스를 사용, 중복된 값을 저장할 수 있음, add() 메소드를 사용해 데이터를 저장