1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

 

<내 코드>

 

E, S, M = map(int, input().split())

e, s, m = 1, 1, 1
year = 0
while True:
    year += 1

    if e == E and s == S and m == M:
        print(year)
        break

    e += 1
    s += 1
    m += 1

    if e == 16:
        e = 1
    if s == 29:
        s = 1
    if m == 20:
        m = 1
반응형

 

 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

 

 

<내 코드>

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		int E = sc.nextInt();
		int S = sc.nextInt();
		int M = sc.nextInt();
		int e=1, s=1, m=1;
		
		for(int i=1;;i++) {
			if(e == E && s == S && m == M) {
				System.out.println(i);
				break;
			}
			
			e += 1;
			s += 1;
			m += 1;
			if(e == 16) e=1;
			if(s == 29) s=1;
			if(m == 20) m=1;
		}
		
	}
}
반응형

 

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

<내 코드>

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
        int sum = 0;
        int[] nums = new int[9];
        boolean ck = false;
        
        // 입력
        Scanner sc = new Scanner(System.in);
        for(int i=0; i<9; i++) {
        	int n = sc.nextInt();
        	nums[i] = n;
        	sum += n;
        }
        
        for(int i=0; i < 9; i++) {
        	for(int j=0; j < 9; j++) {
        		if (ck) break;
        		if(i==j) continue;
        		
        		if(sum - nums[i] - nums[j] == 100) {
        			nums[i] = 0;
        			nums[j] = 0;
        			ck = true;
        			break;
        		}
        	}
        }
        
        Arrays.sort(nums);
        for(int i=0; i < 9; i++) {
        	if (nums[i] != 0) {
        		System.out.println(nums[i]);
        	}
        }

	}
}

 

반응형

 

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

 

<내 코드>

 

import copy
heights = [int(input()) for _ in range(9)]

for i in range(8):
    tmp = copy.deepcopy(heights)
    tmp[i] = 0
    for j in range(i+1, 9):
        tmp_num = tmp[j]
        tmp[j] = 0
        if(sum(tmp) == 100):
            ans = tmp
            break
        tmp[j] = tmp_num
ans.sort()
for i in ans:
    if i != 0:
        print(i)

 

얇은 복사와 깊은 복사의 차이를 알 수 있는 문제였다. 일반 copy는 외부적으로는 다른 객체가 생성되나 내부 요소에는 결국 같은 객체를 가리키고 있다는 것을 알았다. 이것을 방지하기 위해 deepcopy를 해주면 외, 내부 모두 다른 새로운 객체로 만들 수 있다.

반응형

 

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 ��

programmers.co.kr

 

 

<내 코드>

 

- Java

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        
        List<Integer> temp = new ArrayList<>();
        List<Integer> result = new ArrayList<>();
        
        for(int i=0; i < progresses.length; i++){
            if((100-progresses[i]) % speeds[i] == 0){
                temp.add((100-progresses[i]) / speeds[i]);
            }else{
                temp.add(((100-progresses[i]) / speeds[i]) + 1);
            }
        }
        
        // 리스트 temp를 비교해 배포마다 몇 개씩 되는지 
        int cnt = 1;
        int ck = temp.get(0);
        for(int j=1; j < temp.size(); j++){
            if(ck >= temp.get(j)){
                cnt += 1;
            }else{
                result.add(cnt);
                ck = temp.get(j);
                cnt = 1;
            }
            
            if(j == (temp.size()-1)){
                result.add(cnt);
            }
        }
        
        // 리스트를 배열로 바꿔 출력
        int[] answer = new int[result.size()];
        for(int i=0; i<result.size(); i++){
            answer[i] = result.get(i);
        }

        return answer;
    }
}

 

- Python

def solution(progresses, speeds):
    answer = []
    temp = []

    for i in range(len(progresses)):
        days = (100 - progresses[i]) % speeds[i]
        if (days) == 0:
            temp.append((100 - progresses[i]) // speeds[i])
        else:
            temp.append((100 - progresses[i]) // speeds[i] + 1)

    ck = temp[0]
    cnt = 1
    for i in range(1, len(temp)):
        if ck >= temp[i]:
            cnt += 1
        else:
            ck = temp[i]
            answer.append(cnt)
            cnt = 1
            
        if i == (len(temp)-1):
            answer.append(cnt)

    return answer
반응형

 

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

 

 

<내 코드>

 

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        
        for(int i=0; i<prices.length; i++){
            for(int j=i+1; j< prices.length; j++){
                if (prices[i] > prices[j]) {
                    answer[i] = j-i;
                    break;
                }
                if(j == prices.length-1){ // 마지막 요소 확인
                    answer[i] = j-i;
                }
            }
        } 
        return answer;
    }
}

 

def solution(prices):
    answer = []
    
    n = len(prices)
    for i in range(n): #0~4
        cnt = 0
        if i == n-1:
            answer.append(cnt)
            break
        for j in range(i+1,n): #1~4
            if prices[i] <= prices[j]:
                cnt += 1
            else:
                cnt += 1
                break
        answer.append(cnt)
    
    return answer
반응형

 

자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 있다. Arrays클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있다.

 

1. 기본 정렬(오름차순)

 

import java.util.Arrays;

public class Test {
	public static void main(String[] args) {
		
		int[] arr = {4,17,25,31,1};
		String[] arr2 = {"apple","orange","banana","pear","peach","melon"};
		
		Arrays.sort(arr);
		Arrays.sort(arr2);
		
		for(int i : arr) {
			System.out.print(i+" ");
			
		}
		System.out.println();
		
		for(String i : arr2) {
			System.out.print(i+" ");
		}
	}
}

 

 

2. 내림차순 정렬 - Collections / Comparator

 

배열을 내림차순으로 정렬할 때는 Collections 클래스의 reverseOrder() 함수를 사용하면 된다. 만약 기본 타입 배열을 내림차순으로 정렬하고 싶다면 기본 타입의 배열을 래퍼클래스로 만들어 Comparator를 두번째 인자에 넣어주어야 역순으로 정렬할 수 있다.

String 자료형은 기본 타입이 아니다.

주의 할 점은, byte, char, double, short, long, int, float 같은 Primitive Type 자료형 배열에는 적용이 불가능하다. 따라서 Integer, String, Double 같은 Wrapper Class를 사용해야 한다!!

import java.util.Arrays;
import java.util.Collections;

public class Test {
	public static void main(String[] args) {
		
		Integer[] arr = {4,17,25,31,1};
		String[] arr2 = {"apple","orange","banana","pear","peach","melon"};
		
		Arrays.sort(arr, Collections.reverseOrder());
		Arrays.sort(arr2, Collections.reverseOrder());
		
		for(int i : arr) {
			System.out.print(i+" ");
			
		}
		System.out.println();
		
		for(String i : arr2) {
			System.out.print(i+" ");
		}
	}
}

/* 
출력
31 25 17 4 1 
pear peach orange melon banana apple 
*/

 

 

 

3. 2차원 배열 정렬 - Lambda 표현식

 

 

import java.util.Arrays;


public class Test {
	public static void main(String[] args) {
		
		Integer[][] arr = {{2,6}, {1,8},{1,2}};
		
		Arrays.sort(arr, (x1, x2)->{
			if(x1[0] == x2[0]) { // 첫 원소가 같다면
				return Integer.compare(x1[1], x2[1]); //2번째 원소 비교 
			}else {
				return Integer.compare(x1[0], x2[0]);
			}
		});
		for(int i=0; i < arr.length; i++) {
			System.out.println();
			
			for(int j=0; j<arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
		}
		
	}
}

/*
출력
1 2 
1 8 
2 6 
*/
반응형

 

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

<내 코드>

 

import java.util.Arrays;
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in); 
		
		
		int N = in.nextInt(); //정수형 입력값
		int[] arr = new int[N];
		
		for(int i=0; i<N; i++) {
			arr[i] = in.nextInt(); //정수형 입력값
		}
		
		in.close(); // scanner 사용시 닫아줘야 에러 방지(필수는 아니지만)
		Arrays.sort(arr); // 배열 정렬
		System.out.println(arr[0] + " "+arr[N-1]);
	}
}

 

Arrays.sort(배열) : 배열을 오름차순(기본) 정렬한다. 

Arrays.sort(배열, start, end) : 배열 [start~end-1] 까지 정렬한다.

 

반응형

+ Recent posts