프로그래머스의 폰켓몬 문제가 추가돼서 풀어보았다.

 

링크

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

풀이

문제를 이해하는 것이 중요합니다.
입력 받은 폰켓몬 절반 기준으로 중복 없이 고를 수 있는 수를 반환하면 됩니다.

답은 2가지 중 하나입니다.
1. 중복 없이 고를 경우: 입력 받은 폰켓몬 수 / 2
2. 중복이 있을 경우: 중복 제거한 입력 받은 폰켓몬 수

ex1. 
{1, 2, 3, 4, 5, 6}
위의 경우 입력 받은 폰켓몬의 수는 6개, 절반은 3개입니다.
절반(3개)만큼 고를 때 중복 없이 고를 수 있으므로 정답은 3입니다.

ex2.
{1, 1, 1, 2, 2, 2}
위의 경우 입력 받은 폰켓몬의 수는 6개, 절반은 3개입니다.
절반(3개)만큼 고를 때 중복 없이 고를 경우 최대 2개 입니다.
정답은 2입니다.

// 스트림을 사용.
// boxed(): int -> Integer, double -> Double
// collect: 데이터 타입 지정.
// Collectors.toSet().size(): set으로 중복 제거 후 Count
// (nums.length / 2): 입력 받은 폰켓몬 수 절반
public int solution(int[] nums) {
    return Integer.min(
            Arrays.stream(nums)
                    .boxed()
                    .collect(Collectors.toSet()).size(), (nums.length / 2)
    );
}

 

후기

* 난이도 (5점 만점)

5 : 풀 줄 알면 기업 코딩 테스트는 문제없음.

4 : 평균적인 기업 코딩 테스트의 중간 이상.

3 : 평균적인 기업 코딩테스트의 쉬운 문제.

2 : 알고리즘 문제를 연습하고 있다면 풀 수 있는 문제.

1 : 시간이 오래 걸리지 않고, 누구나 풀 수 있는 문제.

 

[프로그래머스] 폰켓몬은 자료구조를 공부한 후 접한다면 어렵지 않게 풀 수 있습니다.

 

자바란?

자바는 썬 마이크로시스템즈(Sun Microsystems)에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어입니다.
자바의 가장 중요한 특징은 운영체제에 독립적이라는 것입니다.
자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에, 운영체제에 따라 프로그램을 변경하지 않고, 실행이 가능합니다.

 

자바의 역사

자바의 역사는 1991년에 썬의 엔지니어들에 의해 고안된 오크(Oak)라는 언어에서부터 시작되었습니다.
처음에는 C++을 확장해서 사용하려 했지만 C++로는 목적을 이루기에 부족하다는 것을 알게 되었습니다.
그래서 C++의 장점을 도입하고 단점을 보완한 새로운 언어를 개발하기 시작했습니다.
처음에는 가전제품이나 PDA와 같은 소형기기에 사용될 모적이었으나 여러 종류의 운영체제를 사용하는 컴퓨터와 인터넷이 등장하자 운영체제에 독립적인 Oak가 이에 적합하다고 판단하였습니다.
Oak를 인터넷에 적합하도록 그 개발 방향을 바꾸면서 이름을 자바로 변경하였고, 자바로 개발한 웹브라우저인 핫 자바를 발표하고 그다음 해인 1996년 1월에 자바의 정식 버전을 발표했습니다.

 

자바언어의 특징

운영체제에 독립적
자바로 만든 프로그래밍은 운영체제와 하드웨어에 관계없이 실행 가능하며 이것을 한 번 작성하면, 어디서나 실행된다.(Write once, run anywhere)라고 표현하기도 합니다.

객체지향 언어
자바는 객체지향 프로그래밍 언어 중 하나로 객체지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 수수한 객체지향 언어입니다.

자동 메모리 관리(Garbage Collection)
자바로 작성된 프로그램이 실행되면, 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리관리를 해줍니다.
가비지컬렉터(Garbage Collector)가 없다면 개발자가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리해야 할 것입니다.
개발자가 개발에 집중할 수 있도록 도와줍니다.

네트워크와 분산처리를 지원
다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 관련 프로그램을 개발할 수입니다.

멀티스레드(Multi-thread)
자바에서 개발되는 멀티스레드 프로그램은 시스템과는 관계없이 구현 가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 어렵지 않습니다.
여러 스레드에 대한 스케줄링을 자바 인터프리터가 담당하고 있습니다.

동적 로딩(Dynamic Loading)
자바로 만들어진 애플리케이션은 여러 개의 클래스로 구성되어 있습니다.
자바는 동적으로 로딩을 지원하기 때문에 실행 시에 모든 클래스를 로딩하지 않고, 필요한 시점에 클래스를 로딩하여 사용할 수 있습니다.

 

JVM (Java Virtual Machine)

자바를 실행하기 위한 가상 기계인 JVM (Java Virtual Machine)은 자바의 특징이자 장점이다.
일반 어플리케이션 코드는 OS만 거치고 하드웨어로 전달되지만, 자바 어플리케이션은 JVM을 거쳐서 전달됩니다.
일반 어플리케이션은 OS와 바로 맞붙어 있기 때문에 OS 종속적입니다.
그래서 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 하는 번거로움이 있습니다.
반면에 자바 애플리케이션은 JVM 하고 상호작용하기 때문에 OS와 하드웨어에 독립적입니다.
다른 OS에서도 프로그램의 변경 없이 실행이 가능합니다.

 

후기

자바를 사용하는 개발자는 압도적으로 많습니다. 자바를 왜 사용하는지 생각해볼 필요가 있습니다.

 

참조 자료: Java의 정석

'JAVA' 카테고리의 다른 글

[JAVA] 객체지향언어란?  (0) 2022.01.19

+ Recent posts