Java 28

백준 - 8958 번

https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 설명 : 첫 줄에는 테스트 케이스가 주어지고, 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열을 O와 X으로만 이루어져있다. 이 문자열속 O는 각 1점인데, 연속으로 맞을 경우 1점씩 더 추가된다. ex) oooooxxx = 15점// oxoxoxoxo = 5점 문제에서 주어진대로 접근하면 될 것 같아 크게 문제가 없다고 생각했다. 그러나 내 생각과 실제 코드 작성과는 거..

백준 - 3052번

https://www.acmicpc.net/problem/3052 3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net 문제 설명 : 자연수 10개가 주어지면, 각 자연수를 42로 나눈 나머지를 구한 뒤, 나머지 값들 중 서로 다른 값이 몇 개 있는지 출력하는 문제 내 생각 : 입력된 값에 42로 나눈 나머지를 구한 뒤, 배열에 저장해서 요소를 확인하는 방법으로 문제를 접근했다. 문제를 접근하는 과정에서 어떻게 배열의 요소의 중복을 count 할 것인지에 대해 생각했고, 이 부분에서 좀 시간을 잡아먹었다. 내가 작성한 코드는 다음과 같다. BufferedReader br = new B..

백준 - 1546번

https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net 설명 : 첫 줄에는 과목의 수 N를 입력받고, 두 번째줄에는 현재의 성적을 입력받는데, 입력된 성적은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다. 자신이 입력한 점수 중 최댓값을 M, 모든 점수를 점수/M*100으로 고쳐서 계산 후 평균을 구하는 문제 이 문제를 풀면서 형 변환에 대해 생각을 안 했었는데, 결과값이 내가 의도한 방법과 다르게 나오자 형변환을 ..

백준 - 2577번

https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net 설명 : 세 자연수 A, B, C의 곱을 계산한 후 결과값에 0~9가 몇 번씩 쓰였는지를 구하는 문제 내 생각 : 우선 ABC를 입력받아야 하고, 입력받은 ABC를 곱한 값을 저장해야한다고 생각했다. 그래서 생각한 것이 "결과 값을 다시 문자열로 변환하고, 이 문자열을 한 문자씩 쪼개서 배열에다가 저장해야겠다"라고 생각했다. 코드를 작성하면서 왜이렇게 복잡해지고 불필요한 느낌이 들지? 라는 쎄한 생각이 들었다... 그렇게 한 문자씩 배열에 저장함과 동..

자료형과 BigDecimal 그리고 소수점(부동, 고정)

자료형 언어마다 다양한 변수의 타입을 지원하며, 값의 범위와 종류는 다르다. 기본 자료형과 참조 자료형으로 나눌 수 있는데 다음과 같다 기본 자료형 (8) = boolean, char, byte, short, int, long, float, doule 참조 자료형 = 기본 자료형을 제외한 나머지 타입(클래스, 인터페이스, 배열, 열거 타입) 기본 자료형은 실제 값을 저장하고, 참조 자료형은 값이 저장되어 있는 주소를 저장한다. 그래서 기본 자료형은 스택 메모리에 저장되며 비 객체 타입이라 null 값을 가질 수 없고, (만약 null 값을 넣고 싶다면 Wrapper Class를 활용해야 한다.) 자료형의 길이가 불변이다. 하지만 참조 자료형은 Null 값을 가질 수 있으며, new를 이용해 생성하는 모든..

Language/Java 2022.05.22

인터페이스와 추상클래스 그리고 Enum

1. 인터페이스(interface)란? 한 클래스가 다양한 클래스를 상속받아 다양한 기능을 사용하면 얼마나 좋을까? 하지만 다중 상속을 자바에서는 지원하지 않는다. 그래서 자바에서는 인터페이스를 이용해 다중 상속을 지원하고 있는데, 인터페이스(interface)는 클래스와 달리 객체를 생성할 수 없는, 클래스에서 구현해야하는 일종의 작업 명세서이다. 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상클래스이다. (인터페이스와 상속은 엄연하게 다름!) 상속이 부모 클래스의 기능을 자식 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 일반적으로 인터페이스는 이렇게 구현한다. (추가적으로 인..

Language/Java 2022.05.14

스프링 부트의 테스트 코드(부제 : JUnit), 책: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

결국 테스트 코드를 작성하는 이유는, 기능이 잘 동작하는지 확인을 하기 위함이다. 테스트 코드는 내가 작성한 로직이나 기능들을 테스트 코드를 통해 잘 동작하는지 확인해보는 것이다. 테스트 코드 작성 전 개발 방식은 보통 1. 코드의 작성 2. 프로그램 실행 3. 테스트 도구를 통해 HTTP 요청 (Postman) = 브라우저를 통해 서버에 접속하고 테스트 대상 메소드를 동작시키는 요청 4. 요청 결과를 System.out.println()을 통해 눈으로 확인. 5. 결과가 이상하면 프로그램 실행을 중지하고 코드를 수정 이런 방식으로 많이 진행 되었는데, 테스트 코드를 작성하게 되면, 1. 코드를 작성 2. 테스트 코드의 작성 후 실행 3. 결과에 따른 동작(코드를 수정한다, 정상 작동하니 다음 로직을 개..

스프링/백엔드 2022.02.10

추상 클래스(abstract class)와 인터페이스(interface)

1. 추상 클래스(abstract class) 추상 클래스는 클래스의 공통된 부분을 뽑아 별도의 클래스인 추상 클래스로 만들어놓고 이것을 상속해서 사용한다. 앞서 클래스를 설계도에 비유했는데, 추상 클래스는 미완성 설계도에 비유가 가능하다. 미완성 클래스로 완성된 제품을 만들 수 없듯이 추상 클래스로 인스턴스는 생성할 수 없다. 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상 클래스의 특징은 다음과 같다. 1. 멤버 변수를 가진다. 2. 추상클래스를 상속하기 위해선 상속 키워드인 extends를 이용한다 3. 추상 메서드를 가지며 상속한 클래스에서 반드시 구현해야 한다. 4. 일반 메서드를 가질 수 있다. 5. 일반 클래스와 마찬가지로 생성자도 있다. 추상 클래스 자체로는 클래스로서의 역할을 ..

Language/Java 2022.01.23

내부 클래스(inner class)

1. 내부클래스(inner class) 내부 클래스는 클래스 내에 선언된 클래스로 두 클래스가 서로 가까운 관계가 있을 때 내부 클래스를 사용한다. 이로인해 멤버에 쉽게 접근할 수 있으며, 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점이 있다. (크게 중요하지 않음.) 1) 내부 클래스의 예시 class A{ //외부 클래스 class B{ // 내부 클래스 } } 2) 내부 클래스의 선언 class Outer{ int iv = 0; // 인스턴스 변수 static int cv = 0; // 클래스 변수 void myMethod(){ int iv = 0; //지역 변수 } } 같은 위치에 선언뿐만 아니라 멤버 변수와 같은 성질을 갖는다. 따라서 내부 클래스가 외부 클래스의 멤버와 같이..

Language/Java 2022.01.22

상속(Inheritance)

상속은 기존의 클래스를 재사용해 새로운 클래스를 작성하는 것인데, 적은 양의 코드로 새로운 클래스의 코드를 작성할 수 있고 코드를 공통적으로 관리해 코드의 추가 및 변경이 매우 용이하다. 상속의 장점 1. 코드의 재사용성 증가 2. 중복된 코드의 제거로 인한 생산성의 향상 및 유지보수가 편해짐. 1) 상속의 예시 class Child extends Parent{ // 내용 } 상속받고자 하는 클래스의 이름 뒤에 extends와 상속 받을 클래스 이름을 적는다. 상속은 부모에서 선언과 정의를 모두 하며 자식은 메서드와 변수를 그대로 사용이 가능해 오버라이딩을 따로 할 필요가 없다. (단일상속 = 하나의 클래스에 하나만 상속이 가능하다) 상속을 해주는 클래스를 '조상 클래스' 상속을 받는 클래스를 '자손 클..

Language/Java 2022.01.21