[BAEKJOON] 배열 10818번 - 최소, 최대

밍챠코·2024년 4월 1일
0

BAEKJOON

목록 보기
33/38

📝[10818]

[Java]

1. Scanner 이용

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

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        int[] arr = new int[N];
        
        for(int i=0; i < arr.length; i++){
            arr[i] = sc.nextInt();
        }
        
        Arrays.sort(arr);
        System.out.print(arr[0] + " " + arr[N-1]);
        
        sc.close();
    }
}

💡 Arrays.sort()
: 배열에 저장된 원소 값을 오름차순으로 정렬해주는 메서드

2. BufferedReader 이용 (배열o)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
   
        int[] arr = new int[N];
        
        for(int i=0; i < N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
		int min = arr[0];
		int max = arr[0];
		
		for(int j=0; j < arr.length; j++){
			if(arr[j] > max) max = arr[j];
			if(arr[j] < min) min = arr[j];
		}
		System.out.println(min + " " + max);
        
        br.close();
    }
}

3. BufferedReader 이용 (배열x)

→ 배열의 원소 정렬에서 최악의 경우 시간복잡도가 N^2
→ 배열을 사용하지 않고, 입력받은 문자를 즉시 비교하여 시간 단축

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        Integer.parseInt(br.readLine()); // N은 사용하지 않기 때문에 입력만 받음
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
   
        int max = -1000000;
        int min = 1000000;
        
        while(st.hasMoreTokens()){
            int value = Integer.parseInt(st.nextToken());
            if(value > max) max = value;
            if(value < min) min = value;
        }
                         
		System.out.print(min + " " + max);
        
        br.close();
    }
}

💡 hasMoreTokens()
→ StringTokenizer에 토큰이 남아있으면 true, 비어있으면 false를 반환해주는 메서드


[Javascript]

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

const N = Number(input[0]);
const arr = input[1].split(" ").map(Number);

let min = arr[0];
let max = arr[0];

for(let i=0; i < arr.length; i++){
    if(arr[i] < min){
       min = arr[i];
    }
    if(arr[i] > max){
        max = arr[i];
    }
}
console.log(min + " " + max); // console.log(`${min} ${max}`);
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

const N = Number(input[0]);
const arr = input[1].split(" ").map(Number);

// arr.sort((a, b) => a - b);
arr.sort(function(a, b) { 
    return a - b;
});

console.log(arr[0], arr[N-1]);

💡 sort() 함수 : 배열 안의 원소를 정렬하는 자바스크립트 배열의 내장 함수

Array객체.sort(요소 순서를 결정하는 데 사용되는 함수명)
→ 함수명 생략할 시 ASCII 문자 순서의 오름차순으로 정렬됨

var nums = [4, 11, 2, 10, 3, 1];

/* 오류 */
nums.sort(); // 1, 10, 11, 2, 3, 4 
             // ASCII 문자 순서로 정렬되어 실제 숫자의 크기 순서대로 나오지 않음

/* 정상 동작 */
nums.sort(function(a, b) { // 오름차순
    return a - b;
    // 1, 2, 3, 4, 10, 11
});

nums.sort(function(a, b) { // 내림차순
    return b - a;
    // 11, 10, 4, 3, 2, 1
});

💡 화살표 함수(Arrow Function)

  • JavaScript ES6에서 도입된 새로운 함수 선언 방식
  • 기존의 함수 표현식보다 간결하고 가독성이 높음
  • 함수 선언을 위한 키워드 function 대신 화살표 =>를 사용하여 함수 선언
  • 중괄호({})로 함수 내용을 감싸지 않고 단일 표현식을 사용할 경우,
    자동으로 해당 표현식의 결과를 반환 (return 키워드 생략 가능)
  • Lexical this : 일반 함수에서의 this는 호출 문맥에 따라 동적으로 결정되지만 Arrow Function에서는 함수가 생성될 때의 스코프에서 this를 캡처함
// 기존 함수 선언 방식
function add(a, b) {
  return a + b;
}

// Arrow Function 선언 방식
const add = (a, b) => a + b;

// Lexical `this` 예시
const person = {
  name: 'John',
  sayHello: function() {
    setTimeout(function() {
      console.log(`Hello, ${this.name}`); // 여기서의 this는 전역 객체(window 또는 undefined)를 가리킴
    }, 1000);
  },
  sayHelloArrow: function() {
    setTimeout(() => {
      console.log(`Hello, ${this.name}`); // Arrow Function을 사용하면 상위 스코프인 person 객체의 this를 캡처하여 사용
    }, 1000);
  }
};
person.sayHello(); // "Hello, undefined" (전역 객체가 this로 사용됨)
person.sayHelloArrow(); // "Hello, John" (person 객체가 this로 사용됨)



  • 매개 변수 표현
// 매개변수가 없을 경우
() => { ... } 

// 매개변수가 한 개인 경우, 소괄호 생략 가능
x => { ... } 

// 매개변수가 여러 개인 경우, 소괄호 생락 불가능
(x, y) => { ... }



  • 함수 몸체 표현
// single line block
x => { return x * x }  

// 함수 몸체가 한줄의 구문이라면 중괄호를 생략할 수 있으며 암묵적으로 return됨, 위 표현과 동일함
x => x * x

[Python]

N = int(input())
arr = list(map(int, input().split()))
print(min(arr), max(arr))

💡 Python의 min(), max() 내장 함수

  • 매개 변수에 리스트/객체의 사용이 가능
  • min() → 최소값 반환해주는 함수, 값이 문자열이면 알파벳 순서 상 앞에 오는 문자열 반환
  • max() → 최대값 반환해주는 함수, 값이 문자열이면 알파벳 순서 상 뒤에 오는 문자열 반환
arr = [1, 2, 3]
arr2 = ['가', '나', '다']

print(min(arr)) # 1
print(max(1,2,3)) # 3
print(min(arr2)) # 가
print(max(arr2)) # 다
N = int(input())
arr = list(map(int, input().split()))
arr.sort()
print(arr[0], arr[-1])

💡 List indexing (리스트 인덱싱)

  • 파이썬에서 리스트 인덱싱은 - 값(음수 인덱싱)도 허용
    → 값을 역순으로 인덱싱함
    ex) 다른 언어에서는 마지막열을 찾기위해 리스트의 길이를 구해서 찾아야 하지만, 파이썬은 -1만으로도 손쉽게 찾을 수 있음
    
a = [1, 2, 3, 4, 5]
# 첫번째 데이터 인덱싱
a[0]
# 두번째 데이터 인덱싱
a[1]
# 맨 마지막 데이터 인덱싱
a[-1]
# 맨 마지막에서 두번째 데이터 인덱싱
a[-2]

💡 List slicing (리스트 슬라이싱)

  • 파이썬에서 리스트를 자르는 문법
    리스트변수[시작index:종료index:step]
    → 시작index의 원소부터 종료index의 바로 앞 원소까지 step만큼 슬라이싱
    → step은 생략 가능하며, default값은 1임
    → step이 양수일 때 오른쪽으로 step만큼 이동하면서 가져옴
    → step이 음수일 때 왼쪽으로 step만큼 이동하면서 가져옴
    
  • 시작 인덱스부터 끝까지 인덱싱 → 리스트변수[시작index:]
  • 처음부터 특정인덱스까지 인덱싱 → 리스트변수[:종료index]
    
b = ['가', '나', '다', '라', '마']

# index1~2 인덱싱
b[1:3] # ['나', '다']

# index1부터 맨 마지막에서 두번째 데이터까지 인덱싱
b[1:-1] # ['나', '다', '라']

# index3부터 끝까지 인덱싱
b[3:] # ['라', '마']

# 처음부터 index2까지 인덱싱
b[:3] # ['가', '나', '다']

# 2칸씩 이동하면서 가져옴
b[::2] # ['가', '다', '마']

# 전체를 거꾸로 1칸씩 이동하며 가져옴
b[::-1] # ['마', '라', '다', '나', '가']
N = int(input())
arr = list(map(int, input().split()))

min = arr[0]
max = arr[0]

for i in arr :
    if i < min :
        min = i
    elif i > max :
        max = i

print(min, max)

0개의 댓글