알고리즘 12

문자열(String)을 이용한 문제 풀이 (3문제)

본 내용은 인프런 자바(Java) 알고리즘 문제풀이 : 입문 - 코딩테스트 대비 강의 문제를 기반으로 포스팅 한 내용입니다. 문제 문자거리 문자열 압축 암호(replace(), parseInt(string, 2)) 문제 1. 문자거리 문제 설명과 예시, 그리고 내가 접근하고자 했던 방식 한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성 ex) teachermode e -> 1 0 1 2 1 0 1 2 2 1 0 고민해보기 정방향 -> 역방향 순으로 반복문을 통해 해당 요소가 있는지 확인하고, 값을 기준으로 최소거리를 저장하면 됐었음. 본 강의에서는 Math.min()을 이용해 기존에 있던 배열의 요소와 새로운 값을 비교해 더 작은 값을 ..

Day.12 재귀함수 그리고 졸업 프로젝트

오늘은 학부 마지막 종착역이자 엔드포인트인 졸업작품 프로젝트 발표회가 있었다. 그래서 공부에 많이 집중할 수 없었는데, 뭔가 아쉬우면서도 최종 피드백을 듣고 엔드포인트를 돌려고하니 4년의 시간이 주마등처럼 지나가면서 묵었던 체중이 내려가는 것 같았다.. 직접 서비스를 기획하고 만들고, 피칭 준비까지 팀장의 무게는 나름 잘 견뎠다고 생각했다... 본론으로 넘어가서 금일은 많은 공부를 못했다...... 오늘 공부한 내용은 재귀함수에 대해 공부했다. 알고리즘의 단골 문제.... 알고리즘 강의 2주차 8에 있는 재귀함수를 간단하게 공부하고 백준 문제로 이 것을 적용해서 풀어보았다. 우선 재귀함수가 무엇이나? 재귀는 자기를 호출하는 프로세스를 가지는 함수인데, 이 알고리즘을 이용해 다양한 문제를 해결 할 수 있는..

Day.10 Binary Search(이진 탐색) - 백준 1920번(수 찾기)

오늘 들어야 할 알고리즘 강의 chapter가 이진탐색 (binary Search)였다. 이미 개념에 대해선 잘 알고있어서, 개념을 이해하는데 큰 어려움은 없었지만, 이 것을 구현하려고 하니 정말 시간이 많이 소모됐다. 기존에 진행하는 Python 알고리즘 강의의 방식대로 python으로 구현하는 것이 아니라 같은 내용을 java로 구현하려고 한다. (백준을 이용) (구현 방식에 대해 생각하고, 직접 그 방식을 구현하려고 많은 시간을 썼지만, 이렇게 연습하다보면 구현 능률이 올라 갈 것이라 믿어 의심치 않는다...) 직접 구현을 하면서 강의를 따라가려고 하니 생각보다 강의 속도가 안나서 고민이다 어떻게 해야할지.. (팀원분이랑 이 부분에 대해서 이야기를 했는데, 그냥 잘 모르겠으면 해설보고 이해를 하는 ..

백준 - 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으로 고쳐서 계산 후 평균을 구하는 문제 이 문제를 풀면서 형 변환에 대해 생각을 안 했었는데, 결과값이 내가 의도한 방법과 다르게 나오자 형변환을 ..

정보처리기사 - 1장 요구사항 확인(소프트웨어 개발 방법론)

해당 내용은 2022 정보처리기사 수제비 실기책을 참고해 작성한 내용입니다. 1. 소프트웨어 개발 방법론 1) 소프트웨어 생명주기 ( SDLC : Software Developement Life Cycle) : 요구분석부터 유지보수까지 전 공정을 체계화한 절차로 시스템 개발의 운용과 유지보수를 거쳐 생애를 마칠 때까지 밟는 순서에 대한 작업 프로세스를 모델화 한 것이다. 이 생명주기의 모델에는 4가지가 있는데, 폭포수(waterfall) 모델, 프로토타이핑(prototyping) 모델, 나선형(spiral) 모델, 반복적(iteration) 모델이 있다. 1) 폭포수 모델(Waterfall Model)은 개발 시 단계를 완료한 후에 다음 단계로 넘어가는 모델로 가장 오래된 모델이다. 선형 순차적 모델으로..

상속(Inheritance)

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

Language/Java 2022.01.21

생성자(Constructor)

메서드처럼 클래스 내에 선언되는 '생성자'는 메서드와 유사한 구조를 가지고 있으나 리턴값이 없다는 점이 다르다. 그럼 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 그래서 인스턴스 변수의 초기화 작업에 주로 사용된다. 생성자의 조건은 2가지가 있다. 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴 값이 없다. 1) 생성자 예시 class Card{ Card(){//매개변수가 없는 생성자.} Card(String k, int num){// 매개변수가 있는 생성자.} } 2) 생성자 분석 클래스 이름(타입변수 명, 타입변수 명 ***){ // 인스턴스 생성 시 수행될 코드, // 주로 인스턴스 변수의 초기화 코드를 적음. } 생성자도 오버로딩이 가능해 하나의 ..

Language/Java 2022.01.21

오버로딩(overloading)

자바에서는 메서드도 변수와 마찬가지로 같은 클래스 내에 서로 구분이 가능해야한다. (그럼 계속해서 이름을 다르게 사용해야하나?) 정답은 그렇지 않다. 같은 이름이라도 매개변수의 개수, 타입이 다르면 같은 이름을 사용해 메서드를 정의할 수 있다. 이렇게, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '오버로딩'이라고 한다(중복 메서드) 보면 한 클래스 내에 같은 이름으로 3개의 getInfo가 정의된 것을 볼 수 있는데, 각자 변수의 개수 및 타입이 다르다. 이렇게 오버로딩의 조건은 크게 2가지이다 1. 메서드의 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 그럼 오버로딩의 장점은 무엇일까? 생각을 해보자. 오버로딩? 우선 효율적일 것이다. 굳이 여러 개의 메서드를 ..

Language/Java 2022.01.20