2022. 11. 7. 22:20ㆍ기록/TIL
[TIL] Today I Learned - 221107
자바를 다시 기본부터 보면서 예전에는 잠깐 이해가 안 되던 것들과
이전에는 그냥 넘겼던 공간복잡도가 보여서 정리를 하게 되었다
조건문 : switch ~ case 문
조건문의 하나다. 예전에 기본서를 봤을 때는 익숙지 않고 if문이 편해서 if문으로만 진행을 했었지만, 이번에 기초를 다시 배우면서 정리를 하고 다음에 쓸 일이 있으면 그 상황에 맞춰 사용하고 싶어 정리하게 되었다.
아래 코드의 경우 이번에 기초를 배우면서 다시 적게 되었던 코드이다.
switch문이 지닌 특징은 break라는 요소가 없다면 case에 만족하는 조건이 등장한 순간부터 코드가 종료되기 직전까지 실행을 한다는 점이다. 처음 기본서를 봤을 때 이 부분이 어색하고 머리에 잘 안 들어와서 건너뛰었던 것으로 기억한다.
스위치 문의 경우 비교하고자 하는 조건이 많을 경우 사용하면 좋을 것 같다.
switch (score) {
case 'A':
System.out.println("A등급");
break;
case 'B':
System.out.println("B등급");
break;
case 'C':
System.out.println("C등급");
break;
default:
System.out.println("C보다 하위 등급");
}
코드를 보면 switch라는 조건문의 소괄호에는 해당 조건문을 진행시킬 수 있는 변수가 들어오고 이러한 변수는 case에 맞춰서 실행이 된다. 또한 아까 말했던 break 요소로만 멈추기에 해당 조건에 맞춰서 break를 기입해야 한다.
삼항 연산자
int i = 11;
String res = (i < 10) ? "10보다 작습니다" : "10보다 큽니다";
System.out.println("res = " + res);
조건식? 값 or 연산자 : 값 or 연산자
조건식이 존재하고? 의 뒤로 각각 참과 거짓의 경우일 때의 맞춰서 해당 값 또는 표현식이 실행이 된다.
위의 예제의 경우 i는 11이므로 해당 조건의 경우는 False인 부분으로 등록이 된다.
그리고 res값에는 False부분이 배정이 된다.
삼항 연산자를 사용 시 코드가 좀 더 간결해진다는 장점이 있는 것 같다.
만약 해당 내용이 if문으로 있다면 아래와 같다.
int i = 11;
String res = "";
if (i< 10){
res = "i는 10보다 작다";
}
else {
res = "i는 10보다 크다";
}
이와 같이 삼항 연산자를 쓰면 간단한 조건문의 경우 짧게 줄일 수 있다는 장점이 존재하겠다고 생각을 했다.
그러나 만약 각 True / False로 출력이 되는 부분의 길이가 길어지게 된다면
가독성을 위해 조건문을 사용하는 게 좋다고 생각한다.
알고리즘 - 공간 복잡도
알고리즘 문제풀이를 하다 보면 보이는 메모리 초과를 담당하는 부분이다.
문제풀이가 아닌 경우에는 실제로 프로그램의 성능 분석에 사용이 된다고 한다.
이는 해당 프로그래밍 얼마나 많은 메모리를 쓰는지 분석하는 부분이다.
공간 복잡도와 별개로 시간 복잡도의 경우 문제풀이에서 시간제한 항목에 속한다
문제를 풀며 문제 풀이에 필요한 부분들 자료구조나 변수 선언 등의 항목에서 생겨난다.
공간 복잡도 = 고정 공간 + 가변 공간
일반적으로 우리가 변수를 하나 선언하면 공간 복잡도가 하나 늘어난다고 보면 된다.
하나의 변수가 선언되는 것은 고정 공간에 포함이 된다.
문제 풀이에 필요한 자료구조에서 리스트를 하나 선언하면 가변 공간이 늘어난다.
가변 공간의 경우 문제의 진행, 프로그램의 진행에 따라 가변적으로, 동적으로 변하는 부분이다.
또한 시간 복잡도와 다르게 반복문 안에서 n번의 탐색이 이뤄진 경우
빅오 표기법(최악의 경우를 가정한 표기법)에서 o(n)의 시간 복잡도를 가지지만,
공간 복잡도의 경우 안에 있는 변수의 개수에 영향을 받기에 공간 복잡도는 n번의 탐색에서 o(n)이 아닌 o(1)이 될 수 있다.
'기록 > TIL' 카테고리의 다른 글
[TIL] Today I Learned - 221109 (0) | 2022.11.09 |
---|---|
[TIL] Today I Learned - 221108 (0) | 2022.11.08 |
[TIL] Today I Learned - 221104 (0) | 2022.11.04 |
[TIL] Today I Learned - 221103 (0) | 2022.11.03 |
[TIL] Today I Learned - 221102 (0) | 2022.11.02 |