알고리즘..
- 많이 풀었다.
- 풀고 풀어도 끝이 없다..
- 더 이상은 naver..
오늘 뭐했지?
- 리액트 듣긴 했는데 영~ 기억에 안남는다..
- 확실히 어려워서 이제는 뇌가 거부반응을 일으키나보다
- 그래서 오히려 마음이 편할지도?..
오늘의 알고리즘
핸드폰 번호 가리기
행렬의 덧셈
x만큼 간격이 있는 n개의 숫자
부족한 금액 계산하기
2016년
나누어 떨어지는 숫자 배열
내적
문자열 내 p와 y의 개수
자세한건 프로그래머스 탭을 봐주세요!
팀원분 중 한분의 코드를 리팩토링
- 그 분의 풀이를 최대한 존중하며 그 분의 의도대로 구현하고
- 궁금하셨던 부분이 해소될 수 있도록 적어봤다.
- (물론 진짜로 해소됐을지는 모르는 문제이다..)
배열 선언 이슈
- 두가지 방법을 할 수 있습니다.
- 처음에 빈 배열을 만들고 push하는 방법
- 처음부터 new Array를 이용해 동적으로 배열의 길이를 정해주는 법
- 차이는 처음에 Array.from을 이용하여 array를 0으로 할당하는 것 이외에는 크게 없기에
- 은 그냥 코드만 올리겠습니다.
1. 빈 배열과 push를 이용한 풀이
/ → %
- 팀원분께서 의도하신 설계대로 구현하려면
- %의 의미가 더 맞습니다.
for문 → if문
- 팀원분의 노션공유코드기준 23 번째 라인의
- for(div_arr[i] == 0){ → if(div_arr[i] === 0)
count 자리에 추가 기능
- count가 들어가는 자리에 정답배열에 나머지가 0인 숫자들을 넣는 것이 바람직해 보입니다.
완성 코드
function solution(arr, divisor) {
// 예를 들어, 주어진 배열 arr가 arr[5] = {3, 4, 1, 4, 7} 라고 하자.
// arr의 각 원소를 divisor로 나눈 값을 원소로 갖는 배열을 div_arr[5]라고 하면,
// 1. div_arr[5] = {3/divisor, 4/divisor, 1/divisor, 4/divisor, 7/divisor}.
// 2. 이때 div_arr의 원소 == 0인 원소의 개수를 판별.
// 3. 만약 그 개수가 0일 경우 -1을 리턴하고,
// 4. 1개 이상일 경우 arr를 오름차순으로 재정렬하여 리턴.
let div_arr = [];
/* arr의 각 원소를 divisor로 나눈 값을 원소로 갖는 배열 */
let re_arr = []; // 오름차순으로 재정렬된 배열 //pjs:정답 배열
let count = 0; // div_arr의 원소 == 0인 원소의 개수 //pjs:0으로 나눠지는
//수가 있는지 체크
let i,
j,
temp = 0;
for (i = 0; i < arr.length; i++) {
// 주어진 배열 arr에 대하여
div_arr.push(arr[i] % divisor);
// arr의 각 원소를 divisor로 나눈 값을 div_arr에 넣음.
if (div_arr[i] === 0) {
count++;
// div_arr의 원소 == 0인 원소의 개수만큼 count 값이 증가
re_arr.push(arr[i]);
}
}
if (count == 0) {
// div_arr의 원소 == 0인 원소의 개수가 0일 경우
re_arr.push(-1); // 최종 값으로 -1을 리턴.
} else {
// arr을 오름차순으로 정렬
for (i = 0; i < re_arr.length; i++) {
for (j = 0; j < re_arr.length - 1 - i; j++) {
/* arr[j]와 arr[j + 1]을 비교할 예정이기 때문에
배열의 마지막 원소를 포함하지 않아도 검색 대상에 포함되므로,
즉 마지막 원소가 어차피 arr[j+1]에 포함되므로 1을 빼줘야 한다.
또, 인접한 두 원소를 바꿔치기할 때마다
배열의 마지막 원소의 위치가 고정되므로 i를 빼줘야 한다. */
if (re_arr[j] > re_arr[j + 1]) {
// arr의 앞쪽 원소가 뒷쪽 원소보다 값이 크면
temp = re_arr[j]; // 더 큰 값을 갖는 앞쪽 원소를 잠시 temp에 넣어뒀다가
re_arr[j] = re_arr[j + 1]; // 더 작은 값을 갖는 뒷쪽 원소를 앞으로 보내고
re_arr[j + 1] = temp; // 더 큰 값이 저장되어 있던 temp를 뒤로 보냄.
}
}
}
}
return re_arr;
}
2. Array.from을 이용한 풀이
function solution(arr, divisor) {
// 예를 들어, 주어진 배열 arr가 arr[5] = {3, 4, 1, 4, 7} 라고 하자.
// arr의 각 원소를 divisor로 나눈 값을 원소로 갖는 배열을 div_arr[5]라고 하면,
// 1. div_arr[5] = {3/divisor, 4/divisor, 1/divisor, 4/divisor, 7/divisor}.
// 2. 이때 div_arr의 원소 == 0인 원소의 개수를 판별.
// 3. 만약 그 개수가 0일 경우 -1을 리턴하고,
// 4. 1개 이상일 경우 arr를 오름차순으로 재정렬하여 리턴.
let div_arr = Array.from({ length: arr.length }, () => 0);
let answer = [];
/* arr의 각 원소를 divisor로 나눈 값을 원소로 갖는 배열 */
let re_arr = []; // 오름차순으로 재정렬된 배열
let count = 0; // div_arr의 원소 == 0인 원소의 개수
let i,
j,
temp = 0;
for (i = 0; i < arr.length; i++) {
// 주어진 배열 arr에 대하여
div_arr[i] = arr[i] % divisor;
// arr의 각 원소를 divisor로 나눈 값을 div_arr에 넣음.
if (div_arr[i] === 0) {
// div_arr의 원소 == 0인 원소의 개수만큼 count 값이 증가
count++;
answer.push(arr[i]);
}
}
if (count == 0) {
// div_arr의 원소 == 0인 원소의 개수가 0일 경우
answer.push(-1); // 최종 값으로 -1을 리턴.
} else {
// arr을 오름차순으로 정렬
for (i = 0; i < answer.length; i++) {
for (j = 0; j < answer.length - 1 - i; j++) {
/* arr[j]와 arr[j + 1]을 비교할 예정이기 때문에
배열의 마지막 원소를 포함하지 않아도 검색 대상에 포함되므로,
즉 마지막 원소가 어차피 arr[j+1]에 포함되므로 1을 빼줘야 한다.
또, 인접한 두 원소를 바꿔치기할 때마다
배열의 마지막 원소의 위치가 고정되므로 i를 빼줘야 한다. */
if (answer[j] > answer[j + 1]) {
// arr의 앞쪽 원소가 뒷쪽 원소보다 값이 크면
temp = answer[j]; // 더 큰 값을 갖는 앞쪽 원소를 잠시 temp에 넣어뒀다가
answer[j] = answer[j + 1]; // 더 작은 값을 갖는 뒷쪽 원소를 앞으로 보내고
answer[j + 1] = temp; // 더 큰 값이 저장되어 있던 temp를 뒤로 보냄.
}
}
}
}
return answer;
}
오늘의 react
- 그래도 다시 항해 시작전의 템포를 조금씩 찾고있다.
- 공부는 관성이다.
- 궤도에 올려야한다.
- 컨텍스트를 동적으로 만들기
- 리액트 컨텍스트의 제한
- 한 hooks안에 다른 hooks이 들어가면 안된다.
- 입력 컴포넌트 리팩토링
- 컨텍스트와 Refs를 이용하여 바꿀 수 있다.
- 단, 모든 hooks에 절대적인 것은 없다.
- 항상 적절한 hooks를 사용하자.
- 새로운 웹서비스 만들기 돌입!
- 다시 컴포넌트부터 차근차근 만든다.
- 이번에는 css module까지만 쓰고있다.
- 내일이 기대된다!
'항해99' 카테고리의 다른 글
[항해99] TIL D+8 (0) | 2022.07.20 |
---|---|
[항해99] TIL D+7 (0) | 2022.07.18 |
[항해99] TIL D+5 (0) | 2022.07.16 |
[항해99] TIL D+4 (0) | 2022.07.15 |
[항해99] TIL D+3 (0) | 2022.07.14 |