Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

rabbit97 님의 블로그

13일 일지 본문

개발 일지

13일 일지

rabbit97 2024. 8. 13. 20:45

어제 못푼 숙제 알고리즘을 풀고 있는데

 

?? 왜 이러는 지 모르겠담

 

첫번째 문제인데 

 

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항
  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

입출력 예sanswer
"pPoooyY" true
"Pyy" false
입출력 예 설명

입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

function solution(s) {
var answer = true;

let num = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === "p" || s[i] === "P") {
num++;
}
if (s[i] === "y" || s[i] === "Y") {
num--;
}
}

if (num === 0) {
answer = true;
} else {
answer = false;
}
return answer;
}

console.log(solution(["pPoooyY"]));
console.log(solution(["Pyy"]));

이렇게 했는데 결과 값이 둘 다 true가 나와서 의문... 그냥 다음에 풀려고 답 적어놓고 끄려했는데 제출하니 

이게 모람

 

역시 알고리즘의 세계는 너무 어렵다.. 정답인지 확신도 안드는 상황에서 정답이라니..

다음 문제!!

 

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항
  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예absolutessignsresult
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
signs[i] ? (answer += absolutes[i]) : (answer -= absolutes[i]);
}
return answer;
}
console.log(solution(4, 7, 12));
console.log(solution(1, 2, 3));

얘도 정답이...

 

???

 

모르겠다 그냥 제출해~~ 나중에 튜터님한테 물어봐야징

 

2주차 강의 시작!!

es6의 구성

 

es6 나머지 설명

 

일급 객체

map 과 set

 

2주차 강의인데 어렵다..

 

그리고 숙제!

 

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 조건
  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
입출력 예stringsnreturn
["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]
입출력 예 설명

입출력 예 1
"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.

입출력 예 2
"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다. 따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는 사전순으로 정렬하면 "abcd"가 우선하므로, 답은 ["abcd", "abce", "cdx"] 입니다.

알고리즘 풀기~

 

function solution(strings, n) {
return strings.sort((a, b) => {
if (a[n] < b[n]) return -1;
if (a[n] > b[n]) return 1;
return a.localeCompare(b);
});
}

const strings1 = ["sun", "bed", "car"];
const strings2 = ["abce", "abcd", "cdx"];
const n = 1;
const result1 = solution(strings1, n);
const result2 = solution(strings2, n);
console.log(result1);
console.log(result2);

이게 맞는지 모르겠다.. 결과는 잘 나왔으나 강의에서 의도한 바는 많이 달라서.. 아무리 검색해도 어떻게 코드를 짤 수 있을 지 모르겠다.

 

검색 중 이 알고리즘을 풀때 엄청 유용한 걸 찾았는데 sort 와 localeCompare를 찾았다.

 

sort 메소드로 유니코드 기준으로 배열을 정렬한 다음 정렬 기준을 localeCompare로 정하는 것이다.

 

다른 유용한 코드들도 많았는데 일단 작성하면서 하다보니 정답이 나와버렸다.

 

언제까지고 계속 이것 만 붙잡을 수는 없으니... 좀 더 익숙 해지고 나중에 다시 풀어보자

 

강사님의 의도는 이게 아닐텐데 아직 코딩이 익숙하지 않은 제자는 검색으로 넘어가고 성장해서 다시 오겠습니다 ㅠㅠㅠㅠ

 

 

3주차 시작!!

 

기본형 데이터와 참조형 데이터의 차이

가변의 위험성

얕은 복사와 깊은 복사

 

**복기 필요**

 

얕은 복사와 깊은 복사가 나온 이유 - 데이터 타입을 결정하면서 생긴 데이터 들은 모두 주소가 할당이 되어있다. 하지만 가변을 통해서 코드를 짜게 되면 주소가 중복이 되어 원하는 결과값이 안나올 수도 있기 때문에 원하는 결과 값을 얻기 위해 하드 코딩을 해야한다. 당연히 하드코딩을 하면 데이터가 많아 질 수록 돌이킬 수 없기 때문에 '불변하는 객체'를 만들어야하고 이 방법을 해결하기 위해서 개발자들은 얕은 복사와 깊은 복사를 사용하는데 얕은 복사도 문제점이 참조형 데이터를 복사할 때 주소 값만 복사 한다는게 문제, 그래서 이럴때는 깊은 복사를 해야한다. 객체의 기본형 데이터는 그대로 복사 하면서 참조형 데이터는 다시 그 내부의 프로퍼티를 복사 하는 방법인데 이를 '재귀적 수행'이라고 하고 함수나 알고리즘이 자기 자신을 호출하여 반복적으로 실행되는 것을 말 한다.

 

 -- 재대로 이해했는지 확인이 필요하지만 이 내용은 따로 저장해놨다가 해결되면 수정하고 안되면 질문하는 방식으로 해결해야겠다. 설명을 들어도 바로 이해 할 자신이 없기 때문에 자바스크립트가 익숙해질때 까지 스스로 해결 해야 한다. --

 

undefined와 null의 차이

 

----------------------------------------------------------------------------------------------------------------------

오늘의 학습 요약

 

지금 받는 느낌이 처음 알고리즘 시작했을때 느낌이다. 그래도 html 1~5주차나 이번 자바스크립트 문법 1주차 때 까지는 할만하네~ 하면서 했었는데 2,3주차 넘어오면서 스스로 고민하는 시간이 많아지고 풀지 못하는 알고리즘에 벽을 느꼈다. 다시 사전 캠프때 처럼 밤샘 작업의 필요성을 느꼈다. 일단 13일 기록은 여기까지 하고 지금부터 밤 새고 내일 기록 마무리 하는 기간까지는 14일 기록으로 남겨야겠다.

 

추가로 호영 튜터님이 좋은 자료를 만들어 주셨는데 바로 북마크 저장하고 그 중

 

 

이건 매일 보는거라 줍줍해왔다. 특히 타입 에러를 가장 많이 봤었는데 저런거였구나..

'개발 일지' 카테고리의 다른 글

15일 일지  (2) 2024.08.15
14일  (0) 2024.08.14
12일 일지  (0) 2024.08.12
9~11일 일지  (0) 2024.08.11
8일 일지  (0) 2024.08.08