본문 바로가기
  • Adillete
【스터디노트】/▷TIL

코테 스터디 55일차 TIL + 오늘의 학습 키워드 일반구현문제

by 아딜렛 2025. 8. 3.

3자리수* 3자리수 연산

- 오늘의 학습 키워드

일반 구현 문제


- 공부한 내용 본인의 언어로 정리하기

3자리수를 각각 문자로 표현해서 10진수 10의 0, 10의 1 , 10의 2제곱을 나중에 곱해서 sum을 했다.


- 오늘의 회고
  - 어떤 문제가 있었고, 나는 어떤 시도를 했는지

10진수 자리수를 표현하는게 어려웠다.

 


  - 어떻게 해결했는지

pb[i] 에다가 자리수를 뺀 상태로 값을 곱한다.

 

자릿수 없이 인덱스로 표현할수 있게 만들기

String B = st.next();
int[] pb= new int[3];
for(int i=0; i<B.length; i++){

	pb[i]= B.charAt(i)-'0';
    
}

 

sum을 만들기

int sum=0;
int place=1;
for(int i=2; i>=0;i--){
	int result=A*pb[i];
    sum += result *place;
    place*=10;

}


  - 무엇을 새롭게 알았는지
  - 내일 학습할 것은 무엇인지


 

 

 

다르게 푸는 방법

이게 다른사람이 푼 문제 풀이중에 가장 빠른 연산을 가진다는 풀이이다.

Q. 왜 중간 중간 공백문자들을 건너뛰는지

 b= System.in.read();

다음 자릿수 읽기이다. 입력에서 숫자와 숫자 사이에 공백 , 개행문자가 있다. 주어진 숫자 485 \n 385 이므로

해당 공백문자를 건너뛰고 다음 숫자의 첫자리를 찾기 위해서 건너뛴다.

 

&15는 무슨뜻인지

ASCII 문자를 숫자로 변환하는 트릭이다.

'0'의 ASCII 는 48(110000)

15는 이진수로 1111이다. &15 하면 하위 4비트만 남는다.

 

53(문자 '5'dml 아스키 값) = 110101(2진수)

15= 001111(이진수)

53&15 = 110101 & 001111= 000101=5 으로 4비트만 남게된다.

res[3]= (res[3]<<3 + res[3]<<1) * res[i]; 이게 무슨 뜻인지