카테고리 없음

23.3.14 공부 기록

jjon-jonny 2024. 3. 14. 23:53

오늘 하루도 아침에 복싱=> 쉬다가 =>2시부터 학원~9시 20분정도까지 일했다.. 개힘들다 진짜

10시~11시 정도까지 명상하고 집와서 글쓴다...ㅜㅜ

 

오늘 공부한거

1. 중간값 계산법 tip

 

 

1. 비트쉬프트 사용!
 
비트 전체가 오른쪽으로 이동시 전체*2를 한값이 된다.
int a=10;
int b=a>>1;
b=5;
홀수 일시는 어떻게 될지 생각해보도록 ㅋㅋ
 
2. int mid=start+(end-start)/2 사용
 
직관적으로 mid=(end+start)/2이지만 그걸 쪼개면 된다.
 
여기서 드는 생각... 어찌되었든 간에 식만 맞으면 되니까...?? 
 
근데 start 가 홀/짝일시 짤리는 값 때문에 다르진 않을까 라고 생각해 봤는데
end start
홀   짝  1씩 짤
홀   홀  안짤
짝  짝   안짤
짝 홀   1씩 짤
이라 문제가 없다 근데 다른 경우에는 수식이 같더라도 문제가 발생할 수 있다.
예를 들어
int a = 10;
int b = 21;
 
int m1 = (a + b) / 2 * 3;
int m2 = a + b + (a + b) / 2; 이와 같은 경우다.
둘 다 식 상으로는 모두 같다...
3(a+b)/2 로 그런데 위에는 총 1이 짤린다. a+b에서 1번짤 원래 계산 (91)/2 로 1짤
==> 만약 *5였다면 2짤이어야 된다. 왜냐면 5를 먼저곱했더라면 안짤렸을 1들이 총 5개 있기 때문 그중 4개가 짝을 이루어서 1개만 짤되어야 함.

 

아래는 3짤이다... 
그래서 결과는 45 46이 나온다.

 

그리고 정렬 구현 해보았다 직접 by c++

 

버블 정렬

cin >> N;
int k;
for (int i = 0; i < N; i++)
{
cin >> k;
v.push_back(k);
}
for (int i = 0; i < N-1; i++)
{
for (int j = i; j < N; j++)
{
if (v[i] > v[j])
{
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
}
}
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}

 

 

선택 정렬
cin >> N;
int k;
for (int i = 0; i < N; i++)
{
cin >> k;
v.push_back(k);
}
int tmp = 0;
int num = 0;
for (int i = 0; i < N - 1; i++)
{
tmp = v[i];
num = i;
for (int j = i; j < N; j++)
{
if (tmp > v[j])
{
tmp = v[j];
num = j;
}
 
}
v[num] = v[i];
v[i] = tmp;
}

 

 

진짜 일때문에 바빠가꼬 뭐 못했는데 내일은 할게 있다..!!

내일 원래 쉬는 날인데 공부 조금 하다가 쉬어야 겠다

 

내일 css 공부좀 해야겠다!

https://wikidocs.net/book/9136이거 공부 할 예정이다 !! 내일의 나 파이팅!