티스토리 뷰
1. 계획
알고리즘 모의고사
혼자 공부하는 자바 chapter 4 ~ chapter6-3.
2. 배운 점
문제는 3개가 주어졌고,
모의고사 문제 3개중 한개를 선택해서 풀고 해설영상 찍고 제출.
1번 문제를 봤는데 기존에 프로그래머스에서 풀었던 문제가 나왔다.
n의 정수값을 받아서 반대로 돌린뒤 각 자리수를 더해서 return 하는 문제였다.
class SolutionMo {
public int SolutionMo(int arr) {
int answer = 0;
StringBuilder sB = new StringBuilder();
String arrString = String.valueOf(sB.append(arr).reverse());
//뒤집고
String[] numbers = arrString.split("");
//쪼게서
for (String s : numbers) {
answer += Integer.parseInt(s);
}
// 뒤집은 배열을 하나씩 출력하면서 정수로 타입변환 후 answer 에 더해줘서 리턴
return answer;
}
}
public class programingMo1 {
public static void main(String[] args) {
SolutionMo s = new SolutionMo();
System.out.println(s.SolutionMo(987654));
}
}
해당 정수를 받아서 담고,
String 문자로 변형해서 뒤집고,
문자열을 공백으로 나누어서 numbers라는 배열에 넣고
하나씩 answer에 문자형을 정수형으로 바꿔서 sum에 더해
return 해주었다.
사실 문제를 봤을땐 어? 뒤집으라니까 뒤집어야하는구나 했는데 나중에 글을 정리하면서 다시보니까
정수의값이 12345 라고쳤을때 1+2+3+4+5를하나 5+4+3+2+1를 하나 똑같은 결과값이 나오는데
굳이 돌려줘야했을까라는 생각이 들었다.
2번까지 풀었는데
문제는: 학생이 출석체크를 해서 한주에 공부시간이 얼마인지 체크하는 문제로
체크인값과 체크아웃값이 배열로 전달받는 메소드를 비교해 연산해준뒤 결과값을 담는 변수에 담아서 return 해주면 되는 문제였다.
단. 체크인은 9~21시가 기본시간이고 체크아웃에서 넘어오는 값이 29시간 즉 새벽 5시를 넘어서 체크아웃을 하는경우
21시 기준으로 연산해줘야하는 함정이 있었다.(지문을 잘 읽자..)
class SolutionMo2 {
public int solutionMo2(int[] checkin, int[] checkout) {
int sum = 0;
for(int i = 0; i<checkin.length; i++) {
if (checkout[i] >= 29) { // checkout 5시가 넘으면
sum += 21-checkin[i];
} else {
sum += checkout[i]-checkin[i];
}
}
System.out.println(sum);
return sum;
}
}
public class programingMo2 {
public static void main(String[] args) {
SolutionMo2 s = new SolutionMo2();
int[] checkin = {9, 9, 8, 8, 7, 8, 9};
int[] checkout = {21, 25, 30, 29, 22, 23, 30};
s.solutionMo2(checkin,checkout);
}
}
혼자 공부하는 자바 책을 읽으면서,
어렴풋이 알고는 있지만 제대로 알고있지 못했던 내용들 위주로 코드 작성을 해보고
이렇게 되는구나 메모를 하면서 진행했다.
타입변환.
문자열을 정수로 변환
Integer.parseInt()
정수를 문자열로 변환
String.valueOf()
타입변환을 하는데 있어 String을 빼고는 규칙성이 있음을 보았다.
Long.parseLong()
Float.parseFloat()
Double.parseDouble()
Byte.parseByte()
등등!
그리고 알파벳의 아스키코드를 char 타입으로 담아서 숫자를 변수에 넣고 출력하게 되면
char n = 'A';
65라는 값이 출력되는데 'A'= 65, 'Z' = 90, 'a' = 97 ~ 'b' = 122 라는 출력 규칙을 확인할 수 있었다.
기본타입과 참조타입
기본타입:byte, char, short, int, long, float, double, boolean
- 변수를 선언해서 데이터를 넣는 과정에서 기본타입은 선언하는 변수에 직접 데이터를 할당한다.
참조타입:배열, 열거, 클래스, 인터페이스
- 메모리의 번지를 변수 안에 저장 실제 데이터는 heap영역에 저장해서 그 저장한 값의 번지수를 변수에 저장한다.
메모리의 사용 영역
메소드 영역
- 메소드 영역은 jvm이 시작할 때 생성되고 모든 스레드가 공유하는 영역. 메소드 영역에는 코드에서 사용되는 클레스들을 클래스 로더로 읽어 클래스별로 정적 필드와 상수, 메소드 코드, 생성자 코드 등을 분류해서 저장한다.
힙 영역
- 힙 영역은 객체와 배열이 생성되는 영역. 여기서 생성된 객체와 배열은 jvm 스택 영역의 변수나 다른 객체에서 참조한다.
만약에 참조하는 객체나 변수, 필드들이 없다면 의미 없는 객체가 되기 때문에 jvm은 이것을 쓰레기로 취급해 garbage collector를 실행시켜 자동으로 삭제해준다.
jvm 스택 영역
- jvm 스택은 메소드를 호출할 때 프레임을 추가하고 메소드가 종료되면 프레임을 삭제한다.
char var1 = 'A';
if(var1 == 'A') {
int var2 = 100;
double var = 3.14;
}
boolean var4 = true;
위와 같이 var1이 'A'이면 이라는 조건으로 if문이 성립해 코드 블럭안의 변수 선언 및 할당을 해주지만 그 블럭이 끝나고 나면 결국 남는건 var1, var4
3. 코멘트
앞으로 알고리즘 문제를 꾸준히 풀어가면서 프로그래밍적인 사고를 가지도록 노력해야겠다.
지금으로는 배열 사용 타입 변환등 자바 메소드를 사용하고 메소드 안의 내용을 사용함에 있어
익숙해지는게 더 중요할거같다는 생각(혼공자 책 보기!)
- Total
- Today
- Yesterday
- java
- 협업
- method
- POI
- DI
- EntitiyManagerFactory
- EC2
- JPQL
- 김영한
- 환경세팅
- Spring
- wil
- instance
- joinfetch
- IOC
- 알고리즘
- 코드해석
- .jks
- python
- JPA
- 항해99
- JWT토큰
- this
- 풀텍스트
- ajax
- ssl
- DTO
- querydsl
- badrequest
- backoffice
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |