본문 바로가기

기록하기

Day + 6


  • 매니저님 피드백으로 공부방법? 순서를 변경해보기
  • 알고리즘 문제푸는양 늘리기
  • 계산기 클래스 분리해서 구현 연습하기
  • 야구게임 클래스 분리해서 구현 연습하기
  • 디버깅 해보는 것 연습하기

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형으로 변환

split("") 결과확인


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차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com


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