Programmers #2

이강용·2023년 1월 16일
0

Programmers

목록 보기
2/58
post-thumbnail

짝수 홀수 개수

문1) 정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

입출력 예

num_listresult
[1,2,3,4,5,][2,3]

나의 풀이

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[2];
        int odd = 0;
        int even = 0;
        
        for(int i : num_list){
            if(i % 2 == 0){
            even++; 
            }else{
                odd++; 
            }
        }
        answer[0] = even;
        answer[1] = odd;
    
        return answer;
    }  

코드 리뷰

num_list안에 원소가 몇개가 있든 홀,짝 2개의 경우만 존재한다. 따라서 배열의 크기를 2(INDEX 0,1)로 잡는다. int odd, even (홀,짝 카운팅 변수)를 초기화 하고, for문 또는 for-each를 돌려 리스트의 원소를 2로 나누어 몫이 0이면 짝수, 1이면 홀수를 카운팅되게끔 하여 answer배열에 담아 리턴한다.


배열 자르기

문2) 정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

입출력 예

numbersnum1num2result
[1, 2, 3, 4, 5]13[2,3,4]
[1,3,5,]12[3,5]

나의 풀이

class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        int[] newArray = new int[num2-num1+1];  
        int cnt = 0;

        for(int i = num1; i <= num2; i++){  
            newArray[cnt] = numbers[i];    
                     cnt++;
        }
        return newArray;
    }
}

코드 리뷰

배열 자르기를 한 원소를 담을 newArray의 크기를
num1, num2의 범위 -1로 잡아준다.
for문 반복을 num1에서 num2까지 시행후
newArray 배열안에 넣는데, 이때 newArray[ ] 안에 어떤 변수를 넣느냐가 관건인거같다. newArray[0]번 부터 리턴이 이루어져야하기 때문에
새 변수 cnt를 초기화하여 반복문 안에서 증가하는 방법으로 프로그램을 구성하였다.


점의 위치 구하기

문3) 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

제한사항

dot의 길이 = 2
dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
-500 ≤ dot의 원소 ≤ 500
dot의 원소는 0이 아닙니다.

입출력 예

dotresult
[2,4]1
[-7,9]2

나의 풀이

class Solution {
    public int solution(int[] dot) {
        int answer = 0;

            if(dot[0] > 0 && dot[1] > 0){
                answer = 1;
            }else if(dot[0] > 0 && dot[1]< 0){
                answer = 4;
            }else if(dot[0] < 0 && dot[1] > 0){
                answer = 2;
            }else{
                answer = 3;
            }
            
        return answer;
        
    }
}

최댓값 만들기 (1)

문4) 정수 배열 numbers 가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

numbersresult
[1, 2, 3, 4, 5]20
[0, 31, 24, 10, 1, 9]744
class Solution {
    public int solution(int[] numbers) {
        
        int max = 0;
                
        
        for(int i = 0; i<numbers.length; i++){
            for(int j = 0; j<numbers.length; j++){
                if(i != j && numbers[j] * numbers[i] > max){
                    
                    max = numbers[j] * numbers[i];
                }
                  
            }
    }
        return max;
  }
}

코드 리뷰

max = 0; 선언하고 , 배열의 중복값을 제외시키며
max값과 다음 배열의 곱을 비교하여 최대값을 검출하는 프로그램을 작성

import java.util.*;
class Solution {
    public int solution(int[] numbers) {
          Arrays.sort(numbers);

        int answer = numbers[numbers.length-1]*numbers[numbers.length-2];

        return answer;
    }
}

idea

Arrays 클래스의 sort 메소드를 활용하면 더 쉽게 해결 할 수 있다. 자연스레 sort한 후 배열의 끝과 끝-1 이 최대값과 그 다음 값이기 때문에 그 값을 리턴하면 된다.

numbers[numbers.length-1] * numbers[numbers.length-2]
여기서 numbers.length는 배열의 크기를 나타내기 때문에 index값을 쓰기 위해 -1, -2를 함

profile
HW + SW = 1

0개의 댓글