java 기초 문제 핵심 아이디어

achoo1912·2022년 9월 17일

zeroBaseBackend

목록 보기
2/8

풀이 핵심 아이디어

q1 정수 자료형 순서 바꾸기

배열의 인덱스로 한자리 한자리 접근하는 게 아니라

한 통의 숫자로 인식해서 자릿수 마다 하나씩 뜯어내는 데
10으로 나누는 방법을 이용하면 아주 맛이 좋다.

int a = 12345;
int c = 0;
while (a > 0) {
	int r = a % 10;
	a /= 10;
    c = c * 10 + r;
}

음수가 주어지면 -1 을 곱하는 과정을 선행.

while 조건 생각하는 법
1. 주어진 정수를 10으로 나눈 나머지로 자릿수를 떼오고,
10으로 나눈 몫으로 새로운 정수 데이터를 덮어 씌우기로 했으면.
2. 당연히 a 가 0 초과일 때 까지 돌려야 됌.
a 의 가장 마지막 값은 1/10 의 몫인 0 인데, 그 이후로는 진행할 필요가 없음.

생각의 순서는 10으로 관련된 연산 반복 로직을 먼저 생각하고,
마지막 순서를 어떻게 정할까 생각. => 마지막 순서는 while 조건에 들어갈 것.

q2 영문 소문자, 대문자 상호변환

문자도 결국 아스키 코드의 숫자로 이루어졌다.
int 로 따지면 소문자가 대문자 보다 큰 수.
그 차이는 외우고 다닐 게 아니라

int a = (int)'a' - (int)'A'

input 이 소문자면 a 를 빼주고, 대문자면 a를 더해줘.

q3 문자열 메서드 기능 구현

replace 기능 구현
문자열이 주어지면, tocharArray 부터 생각.
모조리 캐릭터 배열로 만들어 하나씩 비교.
1. 비교를 할라면 for 반복 으로 한 글자 씩 비교.
1-1. 한 글자 씩 비교 &&
찾으려는 문자열 길이 와 비교 후 남은 오리지날 문자열 길이 비교
-> 연산을 줄이기 위한 생각, 말도 안되는 생각
2. 첫 글자 같으면 나머지 글자 비교, 하나라도 다른 경우 break.
여기서 말도 안되는 생각을 함.

1,2 과정 중 1 과정은 match 플래그 true, 2 과정 중 글자 다른 경우 false 변경

이 생각을 해서 애초에 boolean 객체 변수를 만들어야 함. 미리 이게 말이 되는가
아무튼 과정을 다 거쳐서 결국 match 플래그가 true 로 통과를 하면
그 때 1 과정의 인덱스를 기억해서 리턴.
-> 이걸 생각해서 인덱스를 기억할 객체변수도 준비 해야함

근데 이렇게 끝나면, 변경할 위치 인덱스만 기억할 뿐더러,
찾으려는 문자열이 두번 이상 나오는 경우, 인식 불가.

그래서 본체가 따로 있음.
위에거는 따로 메서드 구현 - 말도 안되는 생각
-> 이미 다 일 저지르고 떠오를 수 밖에 없는 생각

아무튼 본체 작성 시
두번 이상 반복되는 변경하려는 문자열도 인식해야 함.
그래서 do - while 을 본체에서 사용 => 개 적폐 생각 말도 안됨.
do 에서
위에서 만든 메서드 실행 -> 오리지날 문자열 업데이트 -> 반복
언제까지?
위에서 만든 말도안되는 인덱스가 -1 이 될 때 까지
개 억지 생각 말도 안됨.
업데이트 한걸 다시 메서드에 넣어서 인덱스가 -1 이 나올 때까지 반복.
따라서 위에서 만든 인덱스는 -1로 초기화가 되어야 함.
-> 이 생각을 완전 문제를 다 풀 수 있을 때나 가능한 생각이지 이게 어떻게 처음부터 들 수 있는가 도대체가

걍 입다물고 외워야 되는 것
1. tocharArray
2. 문자열 문제 무조건 그냥 인덱스 객체변수.
3. 일치 불일치 따지면 무조건 boolean 플래그.
4. do - while 활용, 원 문자열 바꾸고 업데이트 후,
업데이트 된 문자열 중 바꿀 내용 재탐색.
5. 문자열 문제는 인덱스 계산이 지독할 것을 미리 인식, 심적대비 필수.

profile
zeroBaseBackend 고군분투

0개의 댓글