자바

    [프로그래머스] 크레인 인형뽑기 게임 - JAVA

    [프로그래머스] 크레인 인형뽑기 게임 - JAVA

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입출력 이 문제는 2019 카카오 겨울 개발자 인터십 문제로 프로그래머스 1단계 문제이다. 딱 봐도 stack 을 이용하여 문제를 푸는 기본 문제라고 볼 수 있는데 문제의 조건만 잘 파악하면 굉장히 쉽게 문제를 해결할 수 있는 문제이다. 더 좋은 아이디어나 방법이 있으면 공유바란다. import java.util.*; class Solution { public static void main(..

    [프로그래머스] 달리기 경주 -  JAVA

    [프로그래머스] 달리기 경주 - JAVA

    문제 https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입출력 이 문제는 역시 프로그래머스 1단계 문제로써 문제에 적힌 조건만 잘 이핸다면 어렵지 않게 문제를 해결할 수 있는 문제이다. 나는 Map 을 이용하여 해당 플레이어의 등수를 저장하였고, 추월 할때마다 추월당한 플레이어, 추월한 플레이어의 등수를 서로 바꿔주도록 코드를 짰는데 더 좋은 아이디어나 방법이 있으면 공유 부탁드린다. ^^ import java.util.*; class Solu..

    [백트래킹] 백트래킹의 설명과 간단한 예제풀이

    [백트래킹] 백트래킹의 설명과 간단한 예제풀이

    백트래킹(Backtracking) 1. 백트래킹이란? 백트래킹은 알고리즘 기법 중 하나로, 재귀적으로 문제를 하나씩 풀어가면서 현재 재귀를 통해 확인 중인 노드(상태)가 제한된 조건에 위배되는지 판단하고, 만약 해당 노드가 제한된 조건을 위배한다면 그 노드를 제외하고 다음 단계로 나아가는 방식이다. 가장 중요한 점은 제한조건을 위배한다면 그 노드를 제외한다는 점이다. 백트래킹은 현재 상태에서 다음상태로 가는 모든 경우의 수를 찾아서 이 모든 경우의수가 더 이상 유망하지 않다고 판단되면 이전의 상태로 돌아가는 것을 말한다. 여기서 더 이상 탐색할 필요가 없는 상태를 제외하는 것을 가지치기(pruning)라고도 한다. 따라서 한마디로 정의하면 DFS를 통해 모든 노드를 깊이 우선 탐색을 하면서 더 이상 필요..

    [그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

    [그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

    그리디알고리즘(Greedy Algorithm) 그리디(Greedy)란 '탐욕스러운, 욕심 많은' 이란 뜻이다. 그리디 알고리즘은 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방식이다. 하지만 순간의 최적의 선택을 한다고 해서 최종적인 해답이 최적이라는 보장이 없다. 따라서 그리디 알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로도 최적인 문제들일때 그리디 알고리즘을 적용할 수 있다. 여기서 가장 중요한 점은 그리디 알고리즘을 이용하면 최적해를 찾지 못할 수 도 있다는 것을 항상 명심해야한다. 그렇다면 그리디 알고리즘을 적용하여 최적해를 구할 수 있는 문제는 어떤 조건을 만족할까? 1. greedy choice property : 현재 선택이 이 후의..

    [브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이

    [브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이

    브루트 포스(Brute Force) 브루트 포스는 모든 경우의 수를 무식하게 탐색하면서 요구조건을 충족한 결과만 가져오는 것을 말한다. 이 알고리즘의 가장 큰 특징은 모든 영역을 전체 탐색 한다는 점이다. 전체를 탐색하는 방법에서 1. 선형 구조를 전체적으로 탐색하는 순차 탐색 2. 비선형 구조를 전체적으로 탐색하는 깊이 우선 탐색(DFS) , 너비 우선 탐색(BFS)가 기본적인 도구이다. 실제로 알고리즘을 풀때는, 이 문제가 브루트포스로 해결이 가능한지 확인 후 불가능하다면 어떤 알고리즘을 적용해서 시간복잡도를 줄이며 간단하게 짤 것인지 고민해야한다. (DP, 누적합 , 이분탐색 등등) 브루트 포스에 가장 대표적인 예제로 백준 블랙잭 문제가 있다. 2798번 블랙잭 문제 카지노에서 제일 인기 있는 게임..

    Java 자바의 getter, setter

    Java 자바의 getter, setter

    getter , setter 정의 부모 클래스의 멤버 변수는 private로 선언하는 것이 좋다. 왜그럴까? 캡슐화와 자료보호에 대한 목적으로 해당 클래스의 내부에서만 사용할 수 있도록 하기 위함이다. 하나의 프로젝트를 진행할 때 많은 사람들과 협업을 통해 프로젝트를 수행하므로 해당 자료를 보호 할 수 있도록 private 멤버 변수를 사용하는 것이 좋다. 이러한 부모클래스의 private 멤버 변수에 값을 접근 할때 getter와 setter가 사용된다. 한가지 예시를 들면 이해하기가 쉽다. 코로나로 인해 A군이 병원에 격리 되었다고 할때 A군의 어머니가 A군에게 물건을 전달해주고 싶다고 한다면, A군 어머니는 A군이 입원해있는 병원에 직접 물건을 전달해줄수 없다. 그래서 그 사이에 간호사를 통해 A군..

    Java 자바의 Class

    Java 자바의 Class

    Class Class 란? 클래스는 객체(또는 인스턴스)를 생성하는 하나의 공장(틀, 프레임, 판형)이라고 할 수 있다. 하나의 공장을 class라고 생각한다면 그 공장을 통해 생성하는 것들을 객체(또는 인스턴스)라고 생각할 수 있다. 내가 만들고자 하는 어떠한 것을 클래스로 만들 수 있다. 만들고자하는 객체애 대한 특성과 동작에 대해서 고민하여 클래스를 만들 면 된다. 그래서 우리는 이렇게 정의한다. 객체의 특징 -> 속성(attribute) 객체의 동작 -> 메서드(method) Class가 나온이유는? 클래스 없이도 객체의 특징(속성)들은 변수로 정의할 수 있을 것이고, 동작은 함수로 정의할 수 있다. 하지만 프로그램의 규모가 커지고 여러 사람이 협업을 하는 과정에서 좀 더 쳬계적이고 분업화된 시스..