- 매니저님 피드백으로 공부방법? 순서를 변경해보기
- 알고리즘 문제푸는양 늘리기
- 계산기 클래스 분리해서 구현 연습하기
- 야구게임 클래스 분리해서 구현 연습하기
- 디버깅 해보는 것 연습하기
1. 정수 내림차순 배치
String[] str = String.valueOf(n).split("");
Arrays.sort(str);
StringBuilder sb = new StringBuilder();
for (String aStr : str) {
sb.append(aStr);
}
return Long.parseLong(sb.reverse().toString());
- 입력되는 long형 정수 n -> string 형식으로 변환해 배열에 넣는데 -> split() 메서드로 나눠서 넣기 (이때 "" 넣으면 한글자씩 분리되는듯?)
- 넣은 배열의 값들을 sort()로 정렬(이때는 오름차순) -> for문으로 돌면서 선언해둔 sb 문자열에 한글자씩 붙이기(append())
- 그리고 나온값을 reverse() 사용해서 (stringBuilder 메서드) 뒤집고 -> 그걸 long형으로 변환
2. 두 정수 사이의 합
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a, b), Math.max(b, a));
}
private long sumAtoB(long a, long b) {
return (b - a + 1) * (a + b) / 2;
}
}
- 다른 사람 풀이
- Math.min/max사용해서 큰값, 작은값 판별 -> 등차수열의 합 공식으로 계산
- 풀이 보고 '내가 수학적인 능력이 많이 부족하구나' 느낌
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++)
answer += i;
return answer;
}
}
- 이건 또 다른 풀이
- for문에 삼항연산자를 넣어서 풀기
3. 서울에서 김서방 찾기
for (int i = 0; i < seoul.length; i++) {
if(seoul[i].equals("Kim")) {
answer = "김서방은 " + i + "에 있다";
}
}
- for문으로 seoul의 배열을 순회 -> 배열의 값이 "Kim" 과 같은지 if문으로 확인 -> 결과 출력
- 배열에 무언가를 섞어서 쓰는게 조금 약한것 같다
// x가 김서방의 위치
int x = Arrays.asList(seoul).indexOf("Kim");
- 다른 분의 풀기
- Arrays 관련 클래스들을 한번 봐둘 필요성을 느낌!
- asList() : 새로운 객체 배열을 만드는것이 아니고, 원본 주소값을 가져옴. 그래서 수정하면 원본값도 수정됨!
( + ) Arrays
- copyOf(원본배열, 새로운 배열로 복사할 요소의 개수) : 전달받은 배열의 특정 길이만큼 새로운 배열로 복사해서 반환
- copyOfRange(원본배열, 복사할 시작 인덱스, 끝 인덱스(미포함)) : 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환
- fill(초기화할 배열, 초기값) : 전달 받은 배열의 모든 요소를 특정 값으로 초기화
- sort() : 전달받은 배열의 모든 요소를 오름차순으로 정렬
참조 : http://www.tcpschool.com/java/java_api_arrays
4. 나누어 떨어지는 숫자 배열
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor == 0) {
list.add(arr[i]);
}
}
if(list.size() == 0) {
answer = new int[]{-1};
} else {
answer = new int[list.size()];
}
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
Arrays.sort(answer);
- 새로 ArrayList 배열을 선언 -> for문으로 배열의 길이만큼 순회 -> 인덱스의 값을 파라미터로 입력받는 값으로 나눠서 떨어지면 선언한 배열에 추가
- 만약 배열의 사이즈가 0 이면 -1 반환 -> 아니면 배열의 사이즈를 반환
- 그렇게 만들어진 배열을 다시 for문으로 순회 -> 그걸 다시 답으로 출력할 배열에 넣음 -> 다 넣으면 마지막으로 정렬해서 답 출력
'기록하기' 카테고리의 다른 글
Day + 7 (0) | 2023.10.22 |
---|---|
Collection - List(1) (0) | 2023.10.21 |
Day + 5 (1) | 2023.10.20 |
001 문자 개수 세기 (1) | 2023.10.19 |
Day + 4 (0) | 2023.10.19 |