콜럼버스 스터디 1주차 개념 노트

나무·2024년 5월 27일

알고리즘 스터디

목록 보기
1/5
post-thumbnail

✏️ 개념 노트

1. 알고리즘/자료구조란?

알고리즘

어떤 문제를 해결하기위한 절차이며 명확하게 정의되고 순서가 있는 유한 개의 규칙으로 이루어진 집합

자료구조

자료를 효율적으로 사용할 수 있도록 컴퓨터에 저장하는 방법.

2. 시간복잡도/공간복잡도/빅오 표기법이란?

시간 복잡도

알고리즘의 성능을 평가하는 기준 중 하나로 실행 시간이 얼만큼 걸리는지 평가한 것

공간 복잡도

알고리즘의 성능을 평가하는 기준 중 하나로 저장 공간이 얼만큼 필요한 지 평가한 것.

Big-O 빅오 표기법

알고리즘 실행 시간을 표기하는 표기법 중 하나로 최악의 케이스를 실행 하는 시간이다. 가장 오래걸리는 시간을 표기한것이기 때문에 최소한 보장 되는 성능을 의미하며 그렇기 때문에 가장 일반적으로 사용한다.

*빅 오메가 표기법, 세타 표기법

Big-Ω 빅 오메가 표기법 : 알고리즘 최상의 실행 시간을 표기
Big-θ 빅 세타 표기법 : 알고리즘 평균 실행시간을 표기

3. 문자열 함수 정리

문자열 인덱싱 / 슬라이싱

String str = "hi kim";

// 문자열 인덱싱 1 : 문자열을 배열 처럼 관리할 수 있다
char[] arr = str.toCharArray(); // ['h', 'i',' ', 'k', 'i', 'm']

// 문자열 슬라이싱 : 문자열에서 내가 원하는 부분만큼 잘라낼 수 있다
substring(int begin, int end); // 기본 형태

String result1 = substring(1, 4); // "i k"
String result2 = substring(4); // "im" 
							// -> end가 생략된 꼴, begin 부터 문자열 끝까지 잘라서 반환 

특정 문자가 있는지 확인

String str = "hi, kim hi";

contains("찾을문자열");

boolean result1 = str.contains("kim"); // true
boolean result2 = str.contains("xxxx"); // false

문자열이 같은지 비교

String str1 = "kim";
String str2 = "kim";
String str3 = "lee";

boolean result1 = str1.equals(str2); // true
boolean result2 = str3.equals(str2); // false
boolean result3 = null.equals(str2); // NPE 발생
boolean result4 = str2.equals(null); // false

문자열 길이 반환

String str = "12345";

int result = str.length(); // 5

특정 문자의 인덱스 값 찾기

String str = "hi, kim hi";

// indexOf(찾을문자열, 탐색시작인덱스); -> 맨 처음 부터 탐색
int result2 = str.indexOf("hi",0); // 0
int result3 = str.indexOf("hi",2); // 8

// lastIndexOf(찾을문자열, 탐색시작인덱스); -> 맨 끝에서 부터 탐색 
int result4 = str.lastIndexOf("hi"); // 8
int result5 = str.lastIndexOf("hi", 5); // 0

// 없을 경우
int result6 = str.indexOf("xxx"); // -1 

문자열을 구분자 기준으로 나누고 합치기

String str = "hi, kim hi";

split("정규표현식"); 

// 문자열을 모든 문자 하나하나로 나누기
String[] arr = str.split(""); // ["h", "i", ",", " ", "k", "i", "m", " ", "h", "i"]

// 공백으로 나누기
String[] arr = str.split(" "); // ["hi,", "kim", "hi"]

// 문자열 합치기
String result = str.concat(",lee"); // "hi, kim hi,lee"

문자열 대소문자 변환

String str = "kim";
String result = str.toUpperCase(); // "KIM"

String str = "KIM";
String result = str.toLowerCase(); // "kim"

기존 값을 다른 값으로 치환

String str = "kim jung kim";

String result = str.replace("kim", "lee"); // "lee jung lee"

// 정규 표현식 사용 가능
String result = str.replaceAll("kim", "lee"); // "lee jung lee"
String result = str.replaceFirst("kim", "lee"); // "lee jung kim"

양쪽 끝에서 특정 문자(혹은 공백) 제거

String str = " kim ";

String result1 = str.trim(); // "kim" 양쪽 공백 다 삭제
String result2 = str.strip(); // "kim" 양쪽 공백 다 삭제
String result3 = str.stripLeading(); // "kim " 왼쪽 공백 삭제
String result4 = str.striptrailing(); // "kim " 오른쪽 공백 삭제

// trim vs strip
trim : 아스키코드 공백 만 삭제가능
strip : 아스키코드 + 유니코드 공백 삭제 가능 (Java 11)

아스키코드로 변환 혹은 대소 비교

char c = 'a';
int num = 97;

boolean result1 = c==num; // true
char result2 = (char)num; // 'a'
int result3 = (int)c; // 97 

//사실 int와 char는 굳이 형변환 하지 않아도 
//int 에 char데이터를 혹은 char에 int 데이터를 담으면 알아서 자동 형 변환이 됨

✏️ 문제 풀이

📌 문자열 9046 복호화
📌 문자열 11720 숫자의합
📌 문자열 10798 세로읽기

profile
🍀 개발을 통해 지속 가능한 미래를 만드는데 기여하고 싶습니다 🍀

0개의 댓글