![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBGyuf%2Fbtr9nmUqs0v%2F5lE5XFleZ562VpcL5L6GUk%2Fimg.png)
오늘의 문제 오늘 페어프로그래밍을 하면서 팀원과 풀이 방식이 갈린 문제가 있었다. https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제인데 팀원의 코드는 매우 간결한데 반해 내가 푼 코드는 swtich case로 조건을 10개나 걸어서 코드가 엄청 길어졌다. public int solution(String s) { String[] nums = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; Str..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVWxru%2Fbtr8PYzIrPI%2FSPbPtBPVbjWt6as8kfA6EK%2Fimg.png)
이번 주 자바 기초를 학습하면서 가장 애먹었던 2가지는 '객체지향프로그래밍' 그리고 'JVM'이었다. 그래서 한 주를 마무리 하는 느낌으로 어려웠던 2가지 개념에 대해 정리를 해보고자 한다. 객체 지향 프로그래밍 사실 '지향', '프로그래밍' 이 두 단어는 익숙하기에 문제가 없었는데 그래서 대체 '객체'가 뭔데? 라는 생각이 들었다. 여러 자료를 찾아보고 내가 내린 결론은 객체란? 물리적으로든, 추상적으로든 존재하고 식별가능한 것 물리적, 추상적 하니까 뭔가 어렵게 느껴지지만 그냥 우리가 사는 세계에서 우리가 식별할 수 있는 모든 것이 객체라고 생각하면 된다. 우라가 사는 세계는 존재하는 모든 것들의 상호작용으로 이루어져있는데 이러한 점에 착안해서 프로그램을 구성하는 요소들을 객체로 정의하고 객체들 간의..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXJeiq%2Fbtr8xVRW7NO%2FTKyj9qwFcSGpUN8FmuASV0%2Fimg.png)
이번에는 객체지향프로그래밍에서 중요한 개념 중 하나인 '상속'에 대해서 알아보고 실제 Java에서는 어떻게 상속을 할 수 있는지 알아보도록 하겠습니다. 추상화 상속에 대해 이야기 하기 전에 먼저 '추상화'라는 개념부터 알아야 합니다. 여기서 중요한 설명은 '핵심적인 개념 또는 기능을 간추려 내는 것'이라는 말입니다. 객체지향 프로그래밍에서 말하는 추상화도 이와 같은 맥락을 지닙니다. "객체들이 공통으로 갖는 핵심적인 속성이나 기능을 간추려 정의하는 것" 예를 들어 자동차와 자전거를 생각해봅시다. 이 객체들은 모두 '전진', '좌회전', '우회전' 등의 기능을 갖고 있습니다. Class Car { void forward(){} void left(){} void right(){} ... } Class Bic..
접근제어자 데이터에 대한 접근을 제어하는 녀석으로 4가지 종류가 있습니다. 1. public : 모든 곳에서 접근 가능한 2. private : 해당 클래스에서만 접근 가능한 3. default : 같은 패키지에서만 접근 가능한(아무 제어자도 입력하지 않으면 default) 4. protected : 같은 패키지에서만 접근 가능한 또는 다른 패키지의 경우 자식 클래스에서만 접근 가능한 이런 접근 제어자는 왜 필요한 걸까요? 그냥 모든 데이터에 대해서 public 으로 설정해 누구나 어디에서나 접근 가능하게 하면 안 되는 걸까요? 할인 행사를 예로 들어서 생각해봅시다. 우리 매장은 자전거를 판매하는 매장입니다. public Bicycle { public int price; public Bicycle(int..
클래스 클래스는 객체를 만들기 위한 '설계도'입니다. 이 설계도에는 객체를 만들기 위해 필요한 '필드'와 '메서드' 그리고 '생성자'가 정의되어 있습니다. 생성자는 클래스로부터 객체를 만들 때 가장 먼저 자동으로 호출되는 일종의 메서드로 필드를 초기화하는 등의 역할을 하는데 여기서는 자세히 다루지 않겠습니다. 객체 클래스는 객체를 만들기 위한 설계도라고 했는데 그럼 '객체'는 대체 무엇일까요? 객체는 물리적인 관점이나 추상적인 관점에서 다른 것과 식별이 가능한 '것'을 모두 객체라고 합니다. 쉽게 말해서 이 글을 작성한 저, 글을 읽고 있는 여러분, 이 글, 글을 작성하는 데 사용한 노트북 등등 우리 실세계에서 식별이 가능한 모든 것이 객체가 될 수 있는 것이죠. 그리고 객체를 구성하는 요소에는 '속성'..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Tjfr%2Fbtr8gXWoKOI%2Fc8SnEkLdQbjSZK9nOu0aX1%2Fimg.png)
아이디어 1. 정사각형에 포함된 점은 a 개가 a 줄만큼 나열된 형태입니다. 즉 a 를 구하면 a x a 를 통해 정답을 구해낼 수 있습니다. 2. 한 줄에 포함된 점이 a 개인 정사각형에 대해 중앙이동 알고리즘을 적용하면 '가로' 기준 a 개인 정사각형 하나를 이어 붙인다고도 볼 수 있습니다. 3. 다만 이어 붙이는 과정에서 접합부의 점 1개가 겹치게 되므로 새롭게 만들어진 정사각형의 한 줄에 포함된 점은 2 x a - 1 개가 됩니다. 4. 따라서 초기값 a = 2 에서 시작하여 N 번만큼 2 x a - 1을 반복하고 마지막에 그 값을 제곱해주면 됩니다. 풀이코드 import java.util.Scanner; public class Main { public static void main(String[..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXkFqN%2Fbtr8nRAeYbq%2F7ViBQm8WWhB0RCfmw5kHH0%2Fimg.png)
아이디어 1. 낮에는 올라가고, 밤에는 미끄러지기 때문에 목표 지점에 도달하는 시점은 반드시 낮입니다. 2. N번째 낮까지의 이동거리 : (N-1)*(A-B) + A 3. (N-1)*(A-B) + A >= V 를 만족하는 자연수 N의 최소값을 구하면 그게 곧 정답입니다. 풀이 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); int B = sc.nextInt(); int V = sc.nextInt(); int n = (V-A)/(A-B); if ((V-A)%(A-B) == 0) { n++; ..