안녕하세요! delay100입니다.
개발자 취준을 혼자 하는 건 너무 힘든 일 같아요 ,,,, (취준 2개월째)
따라서 여러 오픈 채팅에 들어가있어서 정보를 받아보곤 하는데,
좋은 정보가 있어서 바로 오늘부터 99club 스터디에 참가하게 되었습니다! (신청 링크 아래에 있어요!)
특히 요 근래 백준을 혼자서 푸는데 동기부여가 쉽지 않아서,, 다 같이 하면 좋겠다 싶어 주저 않고 신청했어요!
(심지어 무료라서 정말 좋습니다)
2024.03.25부터 99club의 첫 스터디가 진행되었습니다!
Gather에 모여 모각코(모여서 각자 코딩)를 하는 방식이고, 카카오톡 오픈 채팅도 있어서 소통이 빠르게 진행되었습니다.
구글 폼으로 신청할 수 있는데, 저는 언어 - JAVA, 난이도 - 미들러(실버, 프로그래머스2)로 신청하였습니다.
월/목에 진행되는데 매일 2문제 정도 출제를 해주실 것 같아요.
혹시몰라 신청 링크도 같이 첨부합니다!
1일차에 주어진 미들러의 첫 문제는 아래와 같습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/118666
아래는 제가 푼 풀이입니다. 코드에 대한 설명은 주석으로 달아두었습니다!
import java.io.*;
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
// map에 성격 유형에 대한 초기값을 선언합니다.
map.put('R', 0);
map.put('T', 0);
map.put('C', 0);
map.put('F', 0);
map.put('J', 0);
map.put('M', 0);
map.put('A', 0);
map.put('N', 0);
// 검사자가 선택한 만큼만 확인하면 됩니다.
for(int i=0; i<choices.length; i++) {
char a = survey[i].charAt(0); // String.charAt()으로 A, C, M 등을 추출합니다.
char b = survey[i].charAt(1);
// 점수가 1~3이면 첫 번째 유형에 대해 "매우 비동의"~"약간 비동의"를 처리합니다.
if(1<=choices[i] && choices[i]<4) {
// 사용자가 선택한 값이 1이면 3점, 2이면 2점, 3이면 1점
map.replace(a, map.get(a)+(choices[i]== 1 ? 3 : (choices[i]==2 ? 2 : 1)));
}
// 점수가 4인 경우는 어떤 성격 유형도 점수를 얻지 않기 때문에 처리를 안 합니다.
// 점수가 5~7이면 첫 번째 유형에 대해 "약간 동의"~"매우 동의"를 처리합니다.
else if(4<choices[i] && choices[i]<=7) {
// 사용자가 선택한 값이 5이면 1점, 6이면 2점, 7이면 3점
map.replace(b, map.get(b)+(choices[i]-4));
}
}
StringBuilder sb = new StringBuilder();
// R, T 묶음에 대해 더 많이 채택된 값을 String에 추가
// 만약 R과 T가 같으면 사전순으로 더 빠른 값인 R이 출력되어야 하므로 아래와 같이 구성했습니다.
if(map.get('R') < map.get('T')) {
sb.append("T");
} else {
sb.append("R");
}
// C, F 묶음에 대해 더 많이 채택된 값을 String에 추가
if(map.get('C') < map.get('F')) {
sb.append("F");
} else {
sb.append("C");
}
// J, M 묶음에 대해 더 많이 채택된 값을 String에 추가
if(map.get('J')<map.get('M')) {
sb.append("M");
} else {
sb.append("J");
}
// A, N 묶음에 대해 더 많이 채택된 값을 String에 추가
if(map.get('A')<map.get('N')) {
sb.append("N");
} else {
sb.append("A");
}
answer = sb.toString();
return answer;
}
}
두 번째 미들러 문제는 아래와 같습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/138476
이번에도 제가 푼 풀이입니다. 마찬가지로 설명을 주석으로 달아두었습니다.
import java.io.*;
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
int[] list = new int[10000001]; // 문제에서 제시한 tangerine의 원소의 크기가 10,000,000보다 작거나 같으므로 배열의 크기를 최대로 선언했습니다.
for(int i=0; i<tangerine.length; i++) {
list[tangerine[i]]++; // 입력받은 값에 대해 list 배열에 +1을 처리해줍니다. 각 입력받은 값들의 수가 list[index]에 들어있는 값과 동일합니다.
}
Arrays.sort(list); // 오름차순 정렬(내림차순을 하고 싶었지만 프로그래머스 환경에서 실패했습니다ㅠㅠ)
int cnt = 0; // 더한 원소 수
int sum = 0; // 현재까지 더한 원소들의 개수의 합
for(int i=0; i<tangerine.length; i++) {
// System.out.println(list[10000000-i]);
if((sum+list[10000000-i])>=k) { // 오름차순이기 때문에 배열의 가장 끝 값부터 접근합니다.
cnt++;
break;
}
cnt++;
sum += list[10000000-i];
}
answer = cnt;
return answer;
}
}
이 문제는 다른 분들은 HashMap을 많이 쓰더군용..ㅠㅠ
사실 int 배열을 만들 때 이렇게 큰 배열을 만들어서 해도 되나 싶었지만 .. 통과가 되더군요..
+ 비기너 문제
1번.
https://school.programmers.co.kr/learn/courses/30/lessons/12922
2번.
https://school.programmers.co.kr/learn/courses/30/lessons/12919
+ 챌린저 문제
1번.
https://school.programmers.co.kr/learn/courses/30/lessons/148653
2번.
https://school.programmers.co.kr/learn/courses/30/lessons/131130
club99 첫 날 미션 아래에 같이 첨부합니다!
'항해99 > 99club1기TIL' 카테고리의 다른 글
[99club/TIL] 1주차 - 일요일 TIL(Today I Learned) (0) | 2024.03.31 |
---|---|
[99club/TIL] 1주차 - 토요일 TIL(Today I Learned) (0) | 2024.03.30 |
[99club/TIL] 1주차 - 금요일 TIL(Today I Learned) (0) | 2024.03.30 |
[99club/TIL] 1주차 - 목요일 TIL(Today I Learned) (0) | 2024.03.28 |
[99club/TIL] 1주차 - 화요일 TIL(Today I Learned) (1) | 2024.03.26 |