내배캠 사전캠프 TIL 21일차

오병택·2025년 2월 14일

내배캠

목록 보기
22/73

학습 요약

자바 강의, 코테 문제

코테

프로그래머스 level 1 - 문자열 내 마음대로 정렬하기

문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

import java.util.Arrays;
class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, (a,b)-> 
                    a.charAt(n)==b.charAt(n)? a.compareTo(b): Character.compare(a.charAt(n),b.charAt(n)) ); 
        
        return strings;
    }
}

character.compare(char a,char b) // 두 개의 문자를 비교해서 a가 b보다 작으면 -1 반환, a와 b가 같으면 0반환, a가 b보다 크면 1 반환
a.compareTo(b) // 문자 말고 문자열을 비교한다는 것 빼곤 위와 같음.
compare() 메서드 규칙: a-b가 음수면 오름차순 정렬, a-b가 양수면 내림차순 정렬.

좀 충격적이다. 1시간 동안 코드 엄청 길게 짰는데 생각하다가 막혀서 gpt한테 물어봤는데 그냥 위의 코드처럼 엄청 짧게 나왔다.. 람다식이 이렇게 간편했나? 이해는 했지만 다시 비슷한 문제 나와도 못 할 것 같다..

JAVA 강의

String클래스의 생성자와 메서드

String(String s) // 주어진 문자열(s)을 갖는 String인스턴스를 생성

String(char [] value) // 주어진 문자열(value)을 갖는 String인스턴스를 생성

String(StringBuffer buf) // StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의
String인스턴스를 생성

charAt(int index) // 지정된 위치(index)에 있는 문자 반환

compareTo(String str) // 문자열(str)과 사전순서로 비교. 같으면 0, 이전이면 음수,
이후면 양수 반환

concat(String str) // 문자열(str)을 뒤에 덧붙임.

contains(CharSequence s) // 지정된 문자열(s)이 포함되었는지 검사

startsWith(String prefix) // 주어진 문자열(prefix)로 시작하는 지 검사

`endsWith(String suffix)`` // 지정된 문자열(suffix)로 끝나는 지 검사

equals(Object obj) // 매개변수로 받은 문자열(obj)과 String인스턴스의 문자열을 비교

equalsIgnoreCase(String str) // 문자열과 String인스턴스의 문자열을 대소문자 무시
하고 비교

indexOf() // 주어진 문자나 문자열이 존재하는 지 확인하여 위치(index)를 반환.
못 찾으면 -1을 반환

indexOf( , int pos) // 주어진 문자나 문자열이 존재하는지 지정된 위치(pos)부터
확인 〃

lastIndexOf(int ch) // 지정된 문자 또는 문자코드, 문자열이 끝에서 부터
존재하는지 확인 〃

length() // 문자열의 길이

split(String regex) // 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아
반환

split(String regex, int limit) // 〃 단, 문자열 전체를 지정된 수로 자름

substring(int begin) // 주어진 시작위치(begin)부터 끝까지의 문자열을 반환

substring(int begin, int end) // 주어진 시작위치(begin)부터 끝 위치(end) 까지의
문자열을 반환. 끝 위치는 포함 안 됨

toLowerCase() // 문자열을 소문자로 변환

toUpperCase() // 문자열을 대문자로 변환

trim() // 문자열의 왼쪽 끝과 오른쪽 끝 공백을 없앤 결과를 반환

valueOf() // 문자열로 변환하여 반환

Join()과 StringJoiner

join(구분자,배열이름) // 여러 문자열 사이에 구분자를 넣어서 결합

StringBuffer 클래스

-String처럼 문자열 배열(char[])을 내부적으로 가짐
-String과 달리 내용 변경 가능

StringBuffer의 생성자

-배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성
-저장할 문자열의 길이를 고려해서 적절한 크기로 생성

StringBuffer() // StringBuffer 선언 및 객체 생성
StringBuffer(int length) // 지정된 개수의 문자를 담는 버퍼를 가진 StringBuffer객체
StringBuffer(String str) // 지정된 문자열 값(str)을 갖는 StringBuffer객체 생성

StringBuffer의 비교

-equals 오버라이딩 안 되어 있음

StringBuffer의 메서드

append() // 문자열로 변환하여 StringBuffer객체가 저장하고 있는 문자열 뒤에 추가

capacity() // 버퍼의 크기

charAt(int index) // 지정된 위치(index)에 있는 문자 반환

delete(int start, int end) // 시작위치부터 끝 위치 사이에 있는 문자 제거. 끝 위치
문자는 포함 x

deleteCharAt(int index) // 지정된 위치(index)의 문자 제거

insert(int pos, 값) // 값을 문자열로 변환하여 지정된 위치(pos)에 추가

length() // 문자열 길이 반환

replace(int start, int end, String str) // 지정된 범위의 문자들을 주어진 문자열로 변환

reverse() // 순서 거꾸로 나열

setCharAt(int index, char ch) // 지정된 위치의 문자를 주어진 문자로 변환

setLength(int newLength) // 지정된 길이로 문자열의 길이를 변경

toString() // String으로 반환

substring(int start) // 지정된 시작 위치부터 끝까지 반환

substring(int start, int end) // 지정된 범위를 반환. 끝은 포함 x

StringBuilder

-StringBuffer는 동기화(데이터보호) o, 멀티 쓰레드에 안전, StringBuilder는 동기화 x

멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요하고 성능저하
멀티 쓰레드일 때는 StringBuffer 사용하고 단일 쓰레기일 땐 StringBuilder 사용

StringBuilder 메서드

-StringBuffer와 동일

Math클래스:

-수학 관련 static 메서드의 집합

abs() // 값의 절대값을 반환

ceil(double a) // 값을 올림하여 반환

floor(double a) // 값을 버림하여 반환

max( , ) // 두 값을 비교하여 큰 쪽 반환

min( , ) // 두 값을 비교하여 작은 쪽 반환

rint(double a) // 주어진 double 값과 가장 가까운 정수값을 double형으로 반환
단, 두 정수의 정가운데 있는 값은 짝수 반환

round() // 소수점 첫 째자리에서 반올림한 정수값을 반환

래퍼클래스

-8개의 기본형을 객체로 다뤄야 할 때 사용하는 클래스
-대부분 기본형의 앞 글자를 대문자로 바꾸면 래퍼클래스가 됨.

Number클래스

-모든 숫자 래퍼 클래스의 조상

문자열을 숫자로 변환하기

문자열->기본형

기본형 a = 기본형에 맞는 래퍼클래스.parse바꾸고 싶은 기본형("숫자")
ex)

int a = Integer.parseInt("100") // int a의 값은 100

문자열->래퍼클래스

래퍼클래스 a = 래퍼클래스.valueOf("숫자")
ex)

Integer a = Integer.valueOf("100") // Integer a의 값은 100

-n진법의 문자열을 숫자로 변환하는 방법
int a = Integer.parseInt("숫자", 진법)
ex)

int a = Integer.parseInt("100", 2) // 100을 2진법으로 읽어서 4로 반환

오토박싱 & 언박싱

-기본형의 값을 객체로 자동변환하는 것을 오토박싱, 그 반대는 언박싱

날짜와 시간

java.util.Date
-날짜와 시간을 다룰 목적으로 만들어진 클래스
-Date의 메서드는 거의 deprecated되었지만, 여전히 쓰임

java.util.Calendar
-Date클래스를 개선한 새로운 클래스. 여전히 단점 존재

java.time패키지
-Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공

Calendar클래스

-추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 함.

Calendar 메서드

Calendar.getInstance() // 현재 날짜와 시간으로 셋팅하고 객체 생성

get(field) // 날짜와 시간 필드 가져오기

getActualMaximum(field) // 해당 필드에서 가질 수 있는 가장 큰 값 반환

set(field, value) // 날짜와 시간 지정

set(년도,달,일,시간,분,초) // 순으로 여러 개 지정도 가능

getTimeInMillis() // 날짜 및 시간을 밀리초 단위로 반환

Calendar에 정의된 필드

느낀 점

음.. 메서드만 주구장창 나와서 이걸 써야 돼 말아야 돼 하다가 아직도 잘 모르겠지만 쓰긴 했다. 사전캠프 마지막 날이다. 걱정이 태산

profile
걱정하지 말고 일단 해봐!

0개의 댓글