본문 바로가기

Java/알고리즘

(47)
[자바 알고리즘 인터뷰] 6장 문자열 처리(4) 가장 흔한 단어 https://leetcode.com/problems/most-common-word/description/ - 금지된 단어를 제외하고 가장 흔하게 등장하는 단어를 출력하라, 대소문자를 구분하지 않으며, 구두점(마침표, 쉼표 등)또한 무시한다. 풀이 1) 전처리 작업 후 개수 처리 및 추출 - 입력값에는 대소문자가 섞여 있으며 쉼표 등 구두점이 존재한다. - 따라서 데이터 클렌징(Data Cleansing)이라 부르는 입력값에 대한 전처리(Processing) 작업이 필요하다. - 정규식에서 \W는 단어 문자(Word Character)가 아닌 것을 뜻한다. - 단어 문자를 뜻할 때는 \w를 사용 - 문자 뒤에 +를 붙이면 연속적인 값을 의미한다. - \W+는 연속적으로 단어 문자가 아닌 값을 의미 rep..
[자바 알고리즘 인터뷰] 6장 문자열 처리(3) 로그 파일 재정렬 https://leetcode.com/problems/reorder-data-in-log-files/description/ - 로그 파일을 재정렬하라. 기준은 다음과 같다. 1) 로그의 가장 앞부분은 식별자로서, 순서에 영향을 끼치지 않는다. 2) 문자로 구성된 로그가 숫자 로그보다 앞에 오며, 문자 로그는 사전순으로 한다. 3) 문자가 동일할 경우에는 식별자순으로 한다. 4) 숫자 로그는 입력 순서대로 한다. 풀이 1) 문자 로그와 숫자 로그를 구분해 각각 처리 - 먼저 문자로 구성된 로그가 숫자 로그보다 이전에 오며, 숫자 로그는 입력 순서대로 둔다. - 문자 로그와 숫자 로그는 서로 정렬 방식이 다르므로, 둘을 분리해 정렬하고 나중에 결과를 서로 이어붙이는 방식으로 풀이 - 먼저 로그에서 각각의 종..
[자바 알고리즘 인터뷰] 6장 문자열 처리(2) 문자열 뒤집기 https://leetcode.com/problems/reverse-string/description/ - 문자열을 뒤집는 함수를 작성하라, 입력값은 문자 배열이며, 리턴없이 입력 배열 내부를 직접 조작하라 풀이 1) 문자 배열로 스왑 - 서로 중앙으로 나아가다 겹치는 지점에 도달하면 종료하는 형태 - 스왑을 통해 배열 내부의 값을 변경 class Solution { public void reverseString(char[] s) { int start = 0; int end = s.length-1; //서로 중앙으로 이동해 나가다 겹치는 지점에 도달하면 종료 while(start
[자바 알고리즘 인터뷰] 6장 문자열 처리(1) 유효한 팰린드롬 https://leetcode.com/problems/valid-palindrome/description/ - 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영숫자(영문자와 숫자)만을 대상으로 한다. 풀이 1) 문자 단위로 추출해서 처리 - Character 클래스에는 원시 자료형 char를 입력값으로 하여 모두 소문자로 변경해주는 toLowerCase() 메소드와 영숫자인지 판별해주는 isLetterOrDigit() 메소드가 모두 존재한다. ex) Character.toLowerCase('G'); //'g' Character.isLetterOrDigit('G'); //true - 문자열에서 맨앞의 문자와 맨 뒤의 문자를 추출한 다음 유효한 문자(영숫자)인지를 확인하고 모두 소문자로..
[자바 알고리즘 인터뷰] 5장 빅오 1. 빅오 - 빅오 표기법이란 입력 크기가 무한대로 향할 때 함수의 상한을 설명하는 수학적 표기 방법으로, 점근적 실행 시간(Asymptotic Running Time)을 표기할 때, 가장 널리 쓰이는 수학적 표기법 중 하나이다. - 점근적 실행시간이란 입력값 n이 커질 때, 즉 입력값이 무한대를 향할 때 lim->무한대 함수의 실행 시간 추이를 의미한다. - 시간복잡도(Time Complexity)의 사전적 정의는 어떤 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도(Computational Complexity)이며, 이와 같은 계산 복잡도를 표기하는 데 대표적인 방법이 바로 빅오다. - 빅오로 시간 복잡도를 표현할 때는 최고차 항만을 표기하며, 계수는 무시한다. - 시간 복잡도를 표기할 때..
[자바 알고리즘 인터뷰] 4장 자료형 1. 자바 자료형 1) 원시 자료형 - 원시형은 메모리에 정확하게 형(Type) 크기만큼의 공간을 할당하고 그 공간을 오로지 값으로 채워 넣는다. 자료형 크기 설명 byte 1바이트 -2^7 ~ 2^7-1 1short 2바이트 -2^15 ~ 2^15-1 int 4바이트 -2^31 ~ 2^31-1 long 8바이트 -2^63~ 2^63 -1 float 4바이트 4바이트의 실수를 표현 double 8바이트 8바이트의 실수를 표현(자바의 기본 실수형) boolean 1비트 참 또는 거짓 char 2바이트 단일 문자를 저장 ex) - 메모리 특정 영역에 4바이트를 할당하고, 그 곳에 7이라는 값을 채워 넣게 된다. int a = 7; 2) 참조 자료형 - 원시형이 아닌 자료형 - 원시형은 자바 메모리 모델에서 ..
[자바 알고리즘 인터뷰] 2장 자바 1. 자바의 주요 특징 1.1 객체 지향 프로그래밍 1) 캡슐화 - 속성과 행위를 외부와 분리하는 개념 - 속성을 변수에, 행위를 메소드에, 캡슐을 클래스에 빗댈 수 있다. - 외부 코드가 데이터에 직접 접근하지 못하도록 방어막 역할을 하고 내부 상태로는 private으로, 외부에는 public 메소드를 노출하여 정보를 은닉(Information Hiding)할 수 있다. ex) Setter/Getter 메소드를 이용한 캡슐화 - name 변수에 직접 접근하지 않고 반드시 setName() 메소드로 변경을, getName() 메소드로는 조회를 진행하는 방식 public class Encapsulation { private String name; public String getName() { return ..