[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 15 리스트(배열), 문자열

2024. 8. 7. 12:54· 문제/프로그래머스

 

조건에 맞게 수열 변환하기2

정수 배열 arr가 주어집니다.
arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다.
이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
import java.util.*;

class Solution {
    public int solution(int[] arr) {
        int answer = 0;        
        int[] copyArr = {};
        
        while (!Arrays.equals(arr, copyArr)) {
            copyArr = Arrays.copyOf(arr, arr.length);
            for(int i = 0; i < copyArr.length; i++){
                int num = copyArr[i];
                // 원소 >= 50 && 짝수 -> 원소 / 2
                if(num % 2 == 0 && num >= 50){
                    arr[i] = num / 2;
                // 원소 < 50 && 홀수 -> 원소 * 2 + 1
                } else if(num % 2 != 0 && num < 50) {
                    arr[i] = num * 2 + 1;
                }
            }
            answer++;
        };
        
        answer -= 1;
        return answer;
    }
}

1. 두 배열의 동등할 때까지 반복한다

2. 각 요소에 대해 조건에 맞게 변경한다

3. 두 배열이 동등하지 않으면 반복하고, 두 배열이 동등하면 반복 횟수에서 -1을 차감한다

 

JAVA 배열 동등성 비교

  • 동일성(identity)
    • 같은 인스턴스를 참조하고 있을 경우 동일
  • 동등성(equality)
    • 인스턴스의 값들이 같을 경우 동등
    • equals() : 동등성 비교
      • 배열 : Arrays.equals(배열1, 배열2)
      • 문자열 : 문자열1.equals(문자열2)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        String[] str1 = {"dadf","wfgg"};
        String[] str2 = Arrays.copyOf(str1, str1.length);

        System.out.println(str1[0].equals(str2[0])); //true
        System.out.println(str1.equals(str2)); //false
        System.out.println(Arrays.equals(str1,str2)); //true

    }
}

 

flag 사용해서 성능 개선

  • 동등성 비교시 두 배열의 요소만큼 비교해야 하기 때문에 비교문이 반복적으로 수행되어 성능 저하가 올 수 있다
  • 변경 플래그 사용시 조건문과, 플래그 갱신만 수행하기 때문에 배열 비교에 비해 성능이 좋아진다
import java.util.*;

class Solution {
    public int solution(int[] arr) {
        int answer = 0;        
        int[] copyArr =  Arrays.copyOf(arr, arr.length); 
        boolean flag;
        
        do {
            flag = false;
            for(int i = 0; i < copyArr.length; i++){
                int num = copyArr[i];
                // 원소 >= 50 && 짝수 -> 원소 / 2
                if(num % 2 == 0 && num >= 50){
                    arr[i] = num / 2;
                // 원소 < 50 && 홀수 -> 원소 * 2 + 1
                } else if(num % 2 != 0 && num < 50) {
                    arr[i] = num * 2 + 1;
                }
                
                if(arr[i] != copyArr[i]) {
                    flag = true;
                }
            }
            copyArr =  Arrays.copyOf(arr, arr.length);
            answer++;
        } while(flag);
        
        answer -= 1;
        return answer;
    }
}

 

'문제 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 20 함수(메서드)  (0) 2024.08.22
[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 17 문자열  (0) 2024.08.10
[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 14 리스트(배열)  (0) 2024.08.04
[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 9 문자열  (0) 2024.07.25
[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 8 조건문, 문자열  (4) 2024.07.25
'문제/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 20 함수(메서드)
  • [프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 17 문자열
  • [프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 14 리스트(배열)
  • [프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 9 문자열
개발원슝이
개발원슝이
꾸준히 개발공부를 합니다.
개발원슝이
꾸준히 개발슝이
개발원슝이
전체
오늘
어제
  • ALL (242)
    • 프로젝트 (34)
      • clone coding (19)
      • mini project (5)
      • Team project(with KIC) (10)
    • 문제 (37)
      • 백준 (7)
      • 프로그래머스 (14)
      • 정보처리기사실기 (16)
    • 설치 (9)
    • 개발 기초 (13)
    • 프로그래밍언어 (124)
      • HTML (16)
      • CSS (17)
      • JavaScript (22)
      • JAVA (13)
      • JSP (10)
      • Python (22)
      • C언어 (24)
    • 프레임워크 (6)
      • Spring (3)
      • Django (3)
    • DB (2)
      • MySQL (2)
    • AWS (1)
    • 오류 (2)
    • 이것저것 (6)
    • 전공자 개발 (3)
    • 비전공자 개발 (5)

블로그 메뉴

  • 네이버블로그(강의노트)
  • GitHub
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 홍정모의 따라하며 배우는 C언어
  • 코딩테스트
  • 따배씨
  • 파이썬공부
  • javascript
  • 인프런
  • 홍정모교수님
  • 점프 투 파이썬
  • 생활코딩
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
개발원슝이
[프로그래머스 : JAVA] 코딩 기초 트레이닝 Day 15 리스트(배열), 문자열
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.