0418-Algorithm-And-Login

Sort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// A=A.sort((a,b)=>a-b);

for(let i =1; i<=A.length-1;i++){
for(let j=0; j<A.length-(i); j++){
if(A[j]>A[j+1]){
let temp = A[j]
A[j] = A[j+1]
A[j+1] = temp
}
}
}
for(let i =0; i<A.length-2; i++){
if(A[i]+A[i+1]>A[i+2]) return 1;
}
return 0;

30분동안 헤메이다가 sort최대로 밀어 넣기를 계속 해주는 형식으로 for-for로 구현하였다.
이 밖에 다른 Sort들 공부 해봐야겠다
근데 …sort에서 performanc 빵점 n*3승 나온다 좋은 sort를 조금 더 연구해보고
어떤 방법들이 있는지 살펴봐야겠다

그냥 sort를 쓰면 100,100

PDF 살펴보면서 공부

정해진 범위 안으로 지정할 수 있는 부분이 은근히 있을 것 같아서 유용하게 쓸 수 있을 것 같다.
알파벳을 찾을 떄 카운팅 소트 같은 방법을 쓴다고

정해진 범위안에서 값이 나올 떄 연속된 숫자세는 부분을 만들고 카운팅을 해준 후
누적 카운트로 다시 포맷팅을 해준다 그리고 한 번 순회했던 부분을 역순으로 하나씩 뺴면서 채워준다

  • 머지소트

머지소트
반으로 나눠주고 나눠주고 비교하면서 합치고 합치고 합치고
머지소트 구현해보기

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)


// mergeSort ->

// 분할
const divided = []

const divideArr = (arr)=>{
if(arr.length===1){
divided.push(arr);
return arr;
}
const mid = parseInt(arr.length/2)
const first = arr.slice(0,mid)
const second = arr.slice(mid)
divideArr(first)
divideArr(second)
}
divideArr(A)

console.log(divided)
let merged = divided.slice(0)

const mergeAB = (a,b)=> {
debugger;
if(b===undefined) return a;
let length = a.length+b.length
let mergeArr = []
let aCompare = a[0]
let bCompare = b[0]
let bIndex = 0;
let aIndex = 0;
for(let i =0; i<length; i++){
if(aCompare>bCompare){
mergeArr[i]=bCompare
bIndex +=1
if(bIndex===b.length){
return mergeArr = mergeArr.concat(a.slice(aIndex))
}
else{
bCompare=b[bIndex]
}
}
else{
mergeArr[i]=aCompare
aIndex +=1
if(aIndex===a.length){
return mergeArr = mergeArr.concat(b.slice(bIndex))
}
else{
aCompare=a[aIndex]
}
}
}
return mergeArr
}
console.log(merged.length);

const mergeArr = (mergedArr)=> {
debugger;
if(mergedArr.length===1) return mergedArr
let newMergeArr = []
for(let i =0; i<mergedArr.length; i+=2){
newMergeArr.push(mergeAB(mergedArr[i], mergedArr[i+1]))
}
return mergeArr(newMergeArr)
}
const findalMerged = mergeArr(merged)
}

console.log(solution([10,20,5,3,8,1]));
만도가 한 것이랑 비교해보기 ...

코딜리티오류를잡아줬다

Merge_Sort
와 이것만 하다니 ㅜ 해커눈 것이랑 거의 비슷 대단 !!!
해커눈_머지소트

효율성

내가 공부에만 집중하는 시간을 얼마나 될까?

오늘 거의 2시에 와서

알고리즘 및 소트 공부 1시간 20분
농땡이 30분

현재시각 4시

2시간 mergeSort와 씨름 … 머리가 별로 좋지는 않다. 정말 근데 차근 차근 하면 할 수는 있다 !!!

코드 보기

6시 15분
7시 저녁
7시~7시반 코딜리티 06-02
7시반~11시 프로젝트

한시간 더 한 것 같다 쳐도.. ~8시
8시~11시 뭐 했는지를 잘 모르겠네…;ㅁ;… 내일도 시간체크를 좀 해봐야곘다
집중력 + 실제로 공부하는 시간이

그리고 딱 목표량을 잘 정해서 그것에만 집중하고 끝나면 다음것 하도록 계획을 잘 세워서 해야겠다. 오늘은 좀 실망

  • Codility06-02

코딜리티 PDF 도 다 읽어볼 것 !!!

그냥 set.size 를 return 하면 되는 문제인데 … 그냥 심심해서 dic으로 풀어봤다.

1
2
3
4
5
6
7
8
9
const dicA = {} 
A.reduce((ac,c)=>{
ac[c]=c
return ac;
}
,dicA)
return Object.values(dicA).length;

// set.size

Codility06-03

1
2
3
4
5
6
7
8
9
function solution(A) {
A = A.sort((a,b)=>a-b);
const lastIdx = A.length-1
const tripletsA = A[lastIdx]*A[lastIdx-1]*A[lastIdx-2]
let tripletsB;
if(A[0]<0&&A[1]<0) tripletsB = A[0]*A[1]*A[lastIdx]
const tripletsMax = tripletsB ? Math.max(tripletsA, tripletsB) : tripletsA
return tripletsMax
}

6-3도 딱히 음수인 부분만 고려해주는 문제

새벽까지 할 수 있는데로 해서 jsonPr은 날려놓기 ! 내일 크롱이 오니까 피드백 을 받아야 한다. 어떻게 든 최신 상태로

1급 객체란 무엇인가?

프로그래밍 언어에서 1급 객체란 다른 객체들에게 적용 가능한 연산을 모두 지원하는 객체를 말합니다. 이러한 연산에는 보통 매개변수로 전달되고, 함수에서 반환되고 수정되고 변수에 할당되는 작업이 포함되는데요.
즉, type을 전달, 반환 및 할당 할 수 있는 경우 해당 type을 1급 객체로 간주됩니다

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

하루 리뷰

오늘 학원에서 철권을 조금씩 조금씩 하다 보니 너무 많이 한 것 같다….
결국 중요한 Parser부분 + 프로젝트 코드는 손도 못 됬다는 것이 …
집와서 의의로 휴식 한 답 시고 웹툰+유튜브 낭비 시간이 많다
체력이 달려서 오늘은 좀 쉬엄쉬엄 하고 싶긴 했지만 … 너무 알고리즘만 잡고 있었던 점이 아쉽고 우선순위를 정해서 합시다 !!!

Sort… 주말에는 나머지 Sort들 찾아서 구현 or이해해보기 !!!

오늘의 문서 줍줍하기