java 알고리즘(1-10)

안호성·2023년 8월 20일

문제풀이

목록 보기
1/2
  1. 조건이 1개 뿐이라면 ex) 짝수이거나 홀수
    if나 switch 대신 삼항 연사자를 쓰면 깔끔하게 보인다.
    (조건) ? (참결과) : (거짓결과) 형식으로 조건이 참이면 참결과 거짓이견 거짓결과를 호출한다.
    answer = (num % 2 == 0) ? "Even" : "Odd";

  2. stream 방식을 사용가능하다( 추후 수정)

  3. 숫자의 자릿수를 더해야 하기때문에
    String[] array = String.valueOf(n).split(""); 를 사용하는 방식도 있다.
    String.valueOf는 다양한 타입의 변수를 문자열 형태(String)으로 바꾸는 명령어이다. String.valueOf
    split는 ( )안에 구분자를 넣어주면 그 구분자를 기준으로 잘라서 배열에 리턴합니다. ( "" )아무것도 안쓰면 한글자씩 자릅니다.
    | 를 사용하면 구분자를 여러개 사용할수 있습니다. ex) str.split(",|@|-| ")
    split 이후에 숫자를 쓰면 해당하는 순서의 값만 가져 옵니다. ex) split ( ) [0] -> 나눈 첫번째 값만 가져온다.
    배열의 크기도 설정이 가능합니다.
    ex) split ( "", 2 ) -> 배열의 크기가 2이므로 처음 자른 값이 0번 index에 담기고 나머지는 전부 1번 index에 담긴다.
    split
    이렇게 문자열 형태의 배열을 더하려면 다시 기본 숫자형으로 바꿔줘야 하므로 Integer.parseInt() 를 사용한다.
    Interger.parseInt()는 문자열 String타입의 숫자를 int타입으로 변환해주는 역할을 한다.
    Intger.parseInt

  4. for 문을 쓸 때 내가 정할 범위를 줄일 수 있다면 줄이는 편이 좋다. 약수를 구할 때도 원래 자신은 무조건 약수 이고 그 다음 수는 2 * ? = 자기 자신 이므로 자신 / 2 한 값보다 클 수는 없다.
    ex ) 12 의 경우 1,2,3,4,6,12 로 12을 최종값에 더하면 12/2인 6까지만 for을 반복해도 된다.

  5. 이 경우도 for문을 쓸 때 int i=0이 아니라 2부터 시작하는 게 맞다. 나머지가 1이 되는 수가 2를 나눌때부터 존재하기 때문

  6. 이 문제 같은 경우 에러가 났는데 x와 i가 둘다 인트형 인데 곱했을 때 int 형이 담을 수 있는 숫자값을 넘어설수가 있는 것이 문제였다. 그래서 (long)x * (long)i 로 변환을 해주었다.

  7. StringBuilder를 사용하면 문자열을 정렬하거나 편집할 수있다. 여기서는 반대로 정렬하면 되므로
    StringBuilder 객체 = new StringBuilder(문자열);
    객체 = 객체.reverse(); 하면 순서를 반대로 뒤집을 수 있다.
    물론 출력시에는 String[] ss = sb.toString().split(""); 로 String타입으로 바꾸고 split로 잘라서 배열에 넣어줘야 한다.
    StringBuilder 메서드

  8. Integer.parseInt를 사용했는데 부호가 -인 경우와 +인경우로 수식을 사용해서 푸는 방식도 있는 것 같다.

  9. Math 함수를 사용하면 간단하게 나오는듯하다. (추후수정)

  10. 정수를 내림차순으로 정렬하기 때문에 Arrays.sort로 오름차순으로 정렬한 했다. 그다음 향상된 for문으로 값을 넣어주고 StringBuilder로 append하여 배열에 있는 문자를 합치고 reverse로 순서를 바꿔주었다.
    람다식으로 푸는 방식도 있는 듯 하다. (추후 수정)

profile
발전된 내일을 바라며

0개의 댓글