[23.10.17] TIL

yy·2023년 10월 17일

개발일지

목록 보기
4/122

오늘 한 일

  1. 페어 프로그래밍
  2. 깃허브 사용
  3. JavaScript 강의 2주차 재수강
  4. 프로그래머스 문제 풀기 [문자열 내 마음대로 정렬하기]

난 sourcetree를 사용해서 맨처음 commit과 push를 하는데 push하는 과정에서 오류가 발생했다.

error:failed to push some refs to

찾아보니 깃허브에는 있으나 로컬에 없는 파일을 push하려고 하면 발생한다고 하는데...나는 해당하지 않았다. 혹시 몰라 vscode 확장프로그램에 깃허브를 설치해놨었는데 그걸로 push하니 오류도 발생하지 않고, 잘 push 되었다.


페어 프로그래밍

처음해보는 페어 프로그래밍. 한 사람은 네비게이터가 되어서 코드를 설명하고, 다른 한 명은 드라이버가 되어 코드를 작성하는 방법이다. 5-10분 간격으로 역할을 바꾼다고 한다. 하지만 같이 한 팀원도 페어가 처음이라서 기능별로 나눠서 했다. 오류가 발생했을 땐 드라이버, 네비게이터 구분할 거 없이 오류를 찾으려고 노력했다. 프로그램은 vscode의 live share을 이용했다. live share를 이용하기에 있어 내가 공유한 페이지가 read only만 되는 문제가 생겼다.


vsCode live share 사용 시 주의 사항. => read only가 안되도록 하기
live share를 누르고 오른쪽에 이런 창이 뜰텐데 그럴 때 파란창을 누르고 싶은 욕구가 생기더라도 필히 copy again 을 눌러서 링크를 공유해야한다.
(파란버튼: read-only가 되도록하는 버튼)

링크를 상대에게 보내고 허용하겠냐는 창이 또 뜰텐데 그럴 때 승낙을 해줘야 그제서야 같이 코드를 수정하면서 할 수 있다.


return

값 반환 + break(함수종료) 역할
함수에 들어가는 return은 다른 곳에서 사용할 수 있도록 값을 반환한다고만 알고있었다. 솔직한 심정으로 왜 쓰는지 확실히 느끼지 못했음. 그래서 언제쓰고 언제 안써야하는지 아리송했음.
javascript에서 함수 끝에 return을 안써주면 기본적으로 undefined를 return하기 때문에 함수를 호출하면 항상 undefined를 return해야한다.



프로그래머스 문제 풀기

https://school.programmers.co.kr/learn/courses/30/lessons/12915
못풀었다. 버블정렬을 할 생각이었는데 쉽지 않았다.

//다른 분이 올려주신 버블정렬 코드
function solution(strings, n) {
    //bubble sort
    var temp;
    for(var i=0; i<strings.length-1; i++) {
        for(var j=0; j<strings.length-1-i; j++) {
            if(strings[j].charAt(n) > strings[j+1].charAt(n)) {
                temp = strings[j];
                strings[j] = strings[j+1];
                strings[j+1] = temp;
            } else if(strings[j].charAt(n) == strings[j+1].charAt(n)) {
                if(strings[j] > strings[j+1]){
                    temp = strings[j];
                    strings[j] = strings[j+1];
                    strings[j+1] = temp;
                }
            }
        }    
    }
    return strings;
}

ㄴ위에서 사용한 메소드는 charAt()

charAt()

문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환.
뭔말이냐면 소괄호 안에 인덱스(숫자)를 넣으면 해당 인덱스에 있는 요소가 나온다.


사실 버블 정렬말고도 쉬운 방법이 있었다.
바로 sortlocaleCompare를 사용하는 것.
strings.sort() : strings를 정렬하는데,
s1[n] === s2[] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n])) : strings내부의 요소들의 n번째끼리 같은지 확인한다.
만약 true면 s2가 s1과 비교하여 앞에 있는지 아닌지 확인하고,
false면 s2[n]이 s1[n]과 비교하여 앞에 있는지 아닌지 확인한다.

sort()

정렬하는 메소드. 인자로 음수면 오름차정렬, 양수면 내림차정렬.
위에서 볼 수 있듯 sort()안에 함수를 넣어서 a-b를 하여 0를 만든 후(아스키코드에서 a가 b보다 작으니 음수가 추출됨을 이용) 오름차 정렬을 한 것.


localeCompare()

참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환(반환값이 양수, 음수, 0이 나옴).
괄호 안에 문자열을 넣고 메소드 앞에 오는 문자와 비교한다.



또다른 방법(이게 제일 간단)

각 문자열 앞에 해당인덱스의 문자를 붙인 후 정렬한다음 앞글자 제거해서 리턴하기.

function solution(strings, n) {
    let result = [];
		// 문자열 가장앞 글자 붙인 문자 배열 만들기
    for (let i = 0; i < strings.length; i++) {
      strings[i] = strings[i][n] + strings[i];
    }
		// 문자열 사전순 정렬
    strings.sort();
		// 앞글자 제거 후 리턴
    for(let j = 0; j < strings.length; j ++) {
      strings[j] = strings[j].replace(strings[j][0],"");
      result.push(strings[j]);
    }
    return result;
}
profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글