24/3/31 알고리즘 (2)
분수의 덧셈
//흐음 일단 그냥 일반 분수로 더했을때의 분자 분모를 구해준다. 그리고 가장 큰수를 뽑고 그숫자 미만의 횟수의
//반복문을 도는데 분모와 분자를 둘다 나누어 떨어지게 하는 최대 공약수를 구한다. 근데 이게 포문 횟수를
//돌리니까 정답이어가지 얼떨결에 됐는데 ... 왜지?
//재귀 함수 미쵸따 딱 나누어 떨어지면 그게 최대 공약수니까 아하 어렵당
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
최빈값 구하기
//내 풀이 맘에 안들긴하는군 일단 reduce를 이용해 객체로 만든다. key에 몇개의 value가 있는지 알기 위해
//일단 해당 키값이 있으면 원래 키값을 증가시키고 아니면 1로 초기화
//그렇게 obj를 만든다. 이제 entries로 키와 벨류를 담은 배열을 요소로 갖는 배열로 만들어서 최빈이들을 앞으로
보낸다.
//이제 완성된 배열이 길이가 하나라면 수가 하나니까 맨앞에 키를 리턴해주면 끝이고
//두개이상의 배열일때 최빈값이 하나인지 두개이상인지 여부를 확인해서 분기해준다.
//오브젝트 구조를 만들고 이제 반복문 돌리고 n을 키 그 수량을 벨류로 갖도록 포문 돌린다.
//그렇게 나온 오브젝트 구조를 배열로 만들어서 이제 벨류에따라 내림차순으로 정렬하고
//이 길이가 1이거나 앞에있는애가 최빈이면 그 최빈의 키값을 도출하고 둘다 해당안되면 -1 도출 캬 좋다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
종이 자르기
//걍 이런 구조로 보여서 했는데 됨 홀리쉿 ㅋㅋㅋ
//와 1e9가 10의 9승이라네? 저런값이 필요해? 어쨋든 N+1개의 요소를 가진 M+1의 배열이라
//이중포문을 M*N회 돌고여 어.... 포기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
캐릭터의 좌표
//흐음 일단 가로 세로의 제한을 찾기위해서 한계점의 x좌표 y좌표를 구한다.
//그리고 배열의 요소가 위아래 오른쪽 왼쪽 중에 뭐냐에 따라 분기하고 이제 다만 한계선에 이미 와있다면
//원래값을 반환하고 아니면 연산처리 해준다.
//흐음 오브젝트로 두고 이제 배열에 요소가 가로 세로 한칸이동을 표현하는 배열이고요
//이제 축적된값과 새로운값을 연산한 절대값 양수겠죠? 이게 한계점을 넘어버리면 원래값을 리턴하고
//아니면 변화된 값을 리턴하게 한다. 캬 좋은데?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
직사각형 넓이 구하기
//이것이 바로 노가다다 하하하하 x좌표 최대 최소 y좌표 최대최소 구해서 꼽해서 짠
//이거좋네 같은값은 set으로 걸러내고 이제 남아있는 네개의 값 정보를 절대값을 이용해서 곱해주면 끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
로그인 성공?
//흐음... 뭐 일단 정보받은 아이디 비번을 쓰기 쉽게 구조분해 하고
//db정보를 확인하기 위해 반복돌리고 이제 아디 비번이 다 일치하면 로그인 보여주고
//아디만 맞으면 우롱패쒀드 보여주고
//기본은 실패
//db 배열을 오브젝트 형으로 바꾸는 구먼? id라는 키값이 있냐? 있다면 패스워드까지 확인하고 아니면 조래하고
// 야 좋은데???
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
등수 매기기
//일단 score를 통해 평균점수를 요소로 담은 배열로 만든다.그걸 arr이라 해보자
//arr을 내림차순으로 만들고 인덱스까지 함께 품는 배열을 arr2라 하자
//arr을 다시한번 map매서드를 써성 arr와 점수가 같은애를 find해서 고기서 이제 등수만 요소로 반환하면
//이쁘게 완성
//어디보자. 자기보다 점수높은 사람을 찾는구나... 그때마다. +1되면서 자신의 순위가 밀리는거야... 덜덜 천재다
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
치킨 쿠폰
//짜증나는 치킨일세 에휴 ... 일단 치킨 갯수만큼 쿠폰을 가지고 있다. 쿠폰10장 당 한마리를 얻을수 있다.
//근데 이제 그렇게 쿠폰질한거랑 쓰고 남은 쿠폰이랑 합한게 다음에 쓸수 있는 쿠폰이다.
//그리고 이제 보은 쿠폰이 10장 이하이면 더이상 시킬수 없다.
//이분은 와일문이구먼 근데 쿠폰 스펠링이 저거였군 ㅋㅋㅋ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
저주의 숫자 3
//그냥 arr를 만들어 줄껀데 arr는 오름차순인데 3의 배수와 각자리에 3을 포함 하지 않도록 조치한다.
//이제 n이랑 같은 위치의 숫자의 인덱스는 n-1일테니까 그거 반환하면 끝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
유한소수 판별하기
//위에서 배운 최대공약수 구하는 함수를 만든다.
//기약분수로 만들고 그 분모를 이제 2와 5이외에 소인수를 가지면 안되니까 2랑 5를 다 빼준값이
//1이면 유한소수가 될수 있고 1이 아니면 유한소수가 될수 없다.
//가장 작은수까지만 반복문을 돌고 이제 둘다를 나눌수 있는 n을 찾는다 최대공약수
//이제 최대공약수로 분모 나눠서 기약분수의 분모로 바꾸고 이제 2랑 5로 계속 쪼개서 분모가 1이외의
값이 되는지 여부로 확인 오 깔끔하고 좋다.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
문자열 밀기
//뭐 이제 일단 기본적으로 answer에는 횟수를 담는다. 이제 배열로 만들어서 맨뒤 요소 빼서 맨앞에 넣는작업
//을 반복문으로 일으키고 해당 횟수를 기록한다. 이제 같아지는 지점이 발생하면 반복문을 멈춘다.
//캬 쌈박하다. 진짜 캬 자연스레 인덱스가 이동숫자가 되고 없으면 -1이 반환되어 버리는 캬
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
특이한 정렬
//sort의 성질을 이해 하기에 참 쉽쥬?
//일단 n과 두 인자의 차이가 같아서 차가 0이 된다면 내림차순으로 오게끔 하고 만약에 둘이 다르다면 차이가 작은애가 앞에 오게끔 조치한다.
//와우 앞에가 0되면 당연히 뒤가 되는 구나 좋다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
다항식 더하기
//아니 왜 자꾸 틀리는지 모르겄네 야발
//제코드가 왜 틀렸는지 아시는분 댓글좀 주세용
//필요없는거 날리고 배열만들고 이제 x의 계수숫자 모아주고 상수항 모아주고 x의 계수가 1일때 경우 빼주고
// 상수항 넣어주면 되는데 나는 왜 오류나냐고 !!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OX퀴즈
//일딴 퀴즈라는 어레이에 맵 매서드를 돌린다. 안쪽에서 요소를 공백을 없앤 배열형태로 만들고 이제 더하기 연산자면
//말그대로 더해주고 비교할 결과값과 함께 배열형태로 리턴하고 , 더하기가 아니면 빼주고
//이걸 다시한번 맵매서드 쓰는데 이제 연산결과와 실제 결과가 일치하면 동그라미 아니면 엑스
//일단 이분도 맵 매서드 돌리고 는 기호 양옆으로 쪼개고 더하기가 포함되는지 확인해서 sign을 정하는 구먼
// 역시 sign의 종류에 따라 연산을 바꿔주고 실제결과와 비교해서 o x 평가
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
다음에 올 숫자
//일단 type을 나눠보자 common이라는 애가 각요소의 차이가 일정하면 등차이므로 분류하고
//아니면 등비로 분류 이제 등차일때는 차만큼 마지막요소에 더해주면끝
//등비일때는 비율만큼 곱해주면 끝
//똑같구먼
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
연속된 수의 합
//배열이 짝수인지 홀수인지 나누어 준다. 그리고 그 중간값을 구해주고 이제 1씩만 차이나는거니까
// i만 증가시키며 push 해주면 끝 짝수와 홀수일때 차이는 1/2만큼이다.
//짝홀수에 상관없이 최소값과 최댓값을 구할수 있구먼 호호 배열의 길이는 이 두개롤 정할수 있고 0으로 채우고
//시작숫자는 min으로 해서 하나씩 증가하도록 하고 좋다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
안전지대
//에러남 ㅋㅋ 해당 인덱스가 없어서 그런가봄 ? 어떻게 풀어나가야 될지 감도 안잡힘
//일단 위험지역 8개 좌표를 미리 덴져 에어리어라고 담아둔거 같음
//이중포문을 돌리고 // 이제 1을 발견하면 어레이 에서 맵을 돌리고 삼중반복문 지려부리네
//각 인덱스 요소를 더해가며 x,y를 재설정함 이값을 board안에 들어있다는 조건이고 원래 안전지대 였다면 이제 위험지역으로 2로 바꾼다. 흐음 아하 1은 놔두는 거구나...
//그리고 이제 다시한번 map 돌려서 0인애들을 찾는거구나 아하.... 이해 완
//이것도 역시 미리 지역을 설정해 놓으시네 ..보드에대한 포이치를 돌리시고 안에서 이제 한번더 포이치를 돌리시고
//결국 이중 반복문 그 요소가 1인 경우에는 포이치를 한번 스킵
//아웃사이드에 썸메서드를 돌려서 아씨 모르겄는데?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
겹치는 선분의 길이
//크흠 일단 양끝점만 표시된거니까 선분의 뒷점말고 앞점을 그 선분이라고 치고 arr에 담아준다.
//lines가 이중 배열이니까 이중 반복문으로 푸쉬 해준다.
//arr이에는 선분의 번호가 전부 담긴다.
//동일한 애들을 확인해야하니까 reduce를 이용해서 객체 형태로 만든다. 동일한 데이터는 축적된다.
// 이제 그중에서 values로 만 이루어진 배열로 만들고 필터링을 통해 선분이 두개이상 겹친애들을 추려내서
//그 길이를 확인하면 끝
//요소가 200인 배열?? 잉? 포문 신박하네 a가 b에 도달할때까지만 돌리는 구먼 아하 a하고 b가 100이하
//범위가 주어 져서 그러는 거구먼 100이상에서 계속 차곡차곡 요소들이 쌓이는구먼
//이제 나중에 reduce에서 1번 초과로 쌓인애들만 카운팅해서 축적하는구먼 오호
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
평행
//점 4개중 2개를 잇는 방식은 경우의 수가 3개이니까 조건을 3개로 나눈다.
//이제 기울기가 같으면 answer를 1로 바꿔준다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
옹알이 (1)
//캬 정규식 야무졌다. cur에 각 문자열이 담기는데 이제 그중에서 발음 가능한애들을 정규식으로 골라서 다 빈문자열로 바꾼다.
// 이제 str에 빈문자열이 있다는것은 아기가 발음 가능하다는것 그러니까 카운트를 증가시켜준다.
//set에다가 발음을 담으셨네 이중 포문이 돌아가고 글자하나하나 담다가 이제 set만들어놓은거에 해당 단어가 있다면
//접두사에 그것을 할당하고 리메인월드는 비워둔다라... 접두사랑 리메인이랑 같으면 포문을 종료시키고
//리메인이 없다면 그건 발음할수 있는 아이니까 결과를 증가... 호우호우
//알면알수록 어려워지는 알고뤼줌
//끄앙 입문 다풀었당!!!