728x90
1. 폰켓몬
https://school.programmers.co.kr/learn/courses/30/lessons/1845
코드 (vscode로 짜서 답을 출력하는 형태로 ..)
import java.util.HashMap;
import java.util.Map;
public class week01_1Phonekemon {
public static void main(String[] args) {
//1. 배열의 이름은 nums
String[] nums = {"1", "1", "3", "4", "5", "4", "5", "1", "5", "1"};
//2. 배열의 값을 값:중복된 횟수 로 HashMap 만들기
Map<String, Integer> map = new HashMap<String, Integer>();
//2-1. map에 for문으로 값을 먼저 넣고, 값이 또 나오면 count+1을 함
for(String str : nums) {
Integer count = map.get(str);
if(count == null) { //새로 나오는 key값이면 key:1회 로 설정
map.put(str, 1);
} else { //중복 key값이면 현재 count에 +1을 함
map.put(str, count+1);
}
}
//Check: Map 출력
/*
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}*/
//3-1. HashMap의 길이가 n/2보다 작거나 같으면 result = HashMap의 길이
int result = 0;
if (map.size() <= (nums.length)/2) {
result = map.size();
} else { //3-2. n/2보다 크면 result = 배열의 길이/2
result = (nums.length)/2;
}
//4. result 출력하기
System.out.println("result = " + result);
}
}
결과
result = 4
#피드백
HashSet: 중복을 허용하지 않는 HashSet을 사용하면 좀 더 쉽게 구할 수 있다.
2. 같은 숫자는 싫어
https://school.programmers.co.kr/learn/courses/30/lessons/12906
코드
import java.util.ArrayList;
import java.util.Arrays;
public class week01_2IHateSameNumber {
public static void main(String[] args) {
//1. arr을 ArrayList 로 변환
String[] arr = {"1", "1", "1", "2", "2", "0", "3", "1", "1", "5"};
ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
//Check
//System.out.println(list);
//2. list의 앞 뒤 숫자 비교하기
int i = 0;
for (i = 0; i < list.size()-1; i++){
//2-1. 앞 뒤 숫자가 같으면..
if (Integer.parseInt(list.get(i)) - Integer.parseInt(list.get(i+1)) == 0) {
list.remove(i+1);
i--; //list.size()가 1만큼 줄어드므로
//Check
//System.out.println(list.size());
}
//2-2. 앞 뒤 숫자가 다르면 그대로 for문 진행
}
//3. 배열 출력하기
System.out.println(list);
}
}
결과
[1, 2, 0, 3, 1, 5]
#피드백
stack 이나 queue로도 풀 수 있다고 함 ...
3. K번째 수
https://school.programmers.co.kr/learn/courses/30/lessons/42748
코드
import java.util.ArrayList;
import java.util.Arrays;
public class week01_3kthNumber {
public static void main(String[] args) {
//1. array, commands 정의
int[] array = {1, 5 ,2, 6, 3, 7, 4};
int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}, {2, 6, 2}};
int row = commands.length; //행의 개수 구하기
//Check
//System.out.println(row);
int n = 0;
ArrayList<String> result = new ArrayList<>();
//2. for문으로 commands에 있는 i, j, k값 순서대로 꺼내기
for (n=0; n<row; n++) {
int i = commands[n][0];
int j = commands[n][1];
int k = commands[n][2];
//Check
//System.out.println("i:" + i +" j:" + j +" k:" + k);
//3. 배열 i~j만큼 자르기
int[] newArr = Arrays.copyOfRange(array, i-1, j);
//Check
//System.out.println(Arrays.toString(newArr));
//4. 배열 정렬하기
Arrays.sort(newArr);
//5. index[k-1]인 수를 결과값 배열에 add
int number = newArr[k-1];
result.add(Integer.toString(number));
}
//6. result 출력하기
System.out.println(result);
}
}
결과
[5, 6, 3, 3]
#피드백
Arrays.sort() 와 Collection.sort() 의 복잡도를 고려해서 사용해보자 (Collection sort가 더 낮음)
728x90
'Algorithm Study > Programmers' 카테고리의 다른 글
[프로그래머스] 과일 장수 / 영어 끝말잇기 (Java) (0) | 2023.07.10 |
---|---|
[프로그래머스] 귤 고르기 / 삼총사 / 자연수 뒤집어 배열로 만들기 (Java) (0) | 2023.07.09 |
[프로그래머스] 체육복 / 가장 가까운 같은 글자 (Java) (0) | 2023.07.03 |
[프로그래머스] 소수찾기 / 의상 (Java) (0) | 2023.06.26 |
[프로그래머스] 최소 직사각형 / 타켓 넘버 / 완주하지 못한 선수 / 모의고사 (Java) (0) | 2023.06.11 |