8월, 2021의 게시물 표시

git-receive-pack not permitted on 깃 허브 로그인 관련 문제

이미지
 개인적인 알고리즘 연습관련으로 커밋푸쉬를 하고 있는 레파지터리에서 며칠전까지만 해도 잘되던 푸쉬가 갑자기 안되는 이슈가 발생했다.  대략 이와 같은 경고가 뜨면서 발생하는 것이고 이는 깃허브측에서 아이디/비밀번호 인증방식을 더이상 지원하지 않으면서 발생하는 이슈라고 한다.  이제 토큰 인증방식을 사용해야 한다고 하니 이에 대해 간략히 정리해 보려고 한다.  토큰 생성을 위해 깃허브에 로그인 후 settings 를 클릭 해준다. Developer settings 를 클릭하고 나서 Personal access tokens 에 들어와주면 새 토큰을 생성할 수 있는 화면이 나온다.  보안을 위해 한번 더 비밀번호를 입력 해준 다음  토큰에 대한 설정 창에서 note에는 이름 아래 만료일에는 날짜를 지정해 줄 수 있다.  no expiration 도 설정할 수 있으나 만료날짜를 지정해주길 강력히 권고해서 오늘로부터 1년으로 지정해주었다. 각종 권한들을 지정해줄 수 있는데, 뭐가 뭔지는 잘 모르겠고, 그냥 커밋 풀/푸쉬만 해줄 거면 repo에 대한것만 지정해주면 된다고 한다. 마지막 이 화면에서 끄지 않고 바로 키값을 복사해두어야 한다. 이후에는 다시 보여 주지 않고 해당 토큰이 가진 설정과 삭제 선택버튼 정도만 보여주니까 해당 키값을 일단 복사해둔다. 마지막 평소 이클립스와 깃 연동때와 마찬가지로 다시 URI를 복사해서 간 다음 비밀번호 자리에 해당 토큰을 붙여 넣으면 완성 된다. 되던 깃허브 연동이 안되는 경우라 조금 헤맬 수 있지만, 인터넷에 이미 설명이 많아서 그대로 따라가면 되는 이슈 였다. 
 간만의 주저리주저리 blogger의 제한된 기능으로 좀 답답했는데, HTML을 조작하여 그나마 몇몇 기능을 추가할 수 있다는걸 알게되었다. 일례로 그간 코드를 스크린샷 찍어서 올려서 매번 크기가 뒤죽박죽이었지만 이 전 포스팅을 기준으로 획일화된 코드를 올릴 수 있게 되었다. 처음부터 노션쓸걸 .... 싸피의 과목평가는 기사문제같은 느낌이었다. 하지만 약간 더 세분화해서 실제 코딩에 쓸 수 있는 지식이었지만, 월말평가처럼 직접 코드를 짜는 게 아닌 4지선다, 단답, 서술형 등으로 구성된 문제는 간만에 푸는 느낌이라 오히려 새로웠다. 오늘은 말복이고, 저번 주말은 입추였다. 올림픽은 끝났고 시간은 왜 이렇게 빠른 지.... 나는 무슨일을 해야하나.  내 깃허브에 최대한 잔디를 심어보려 했지만 보통 알고리즘 문제는 해당 문제를 해결하고 이쁜 코드를 올리는 편이지, 지속해서 커밋하지 않기 때문에 좀처럼 잔디색은 엹은 상태로 남아있다. 프로젝트를 나가면 아주 푸르른 잔디를 심어야지 ...   BFS 너비 탐색  은 같은 높이의 노드들을 우선 전부 탐색 후  높이를 올려서 탐색하는것으로 선입선출인 큐에 데이터를 저장해서 전체 탐색 진행  이차원 배열의 깊은 복사  결국 for 문 돌리면서 각각 배열을 Arrays.copyOf(대상, 대상길이); 해주어야 한다. 순열 , 조합, 부분집합 너무 중요 !!! 
다차원배열의 알고리즘  하루에 알고리즘만 3~4개씩 푸는 수업이 계속 되고 있다. 처음 접했던 Bufferedreader 와 Stringtokenizer가 어느정도 익숙해졌고, 2차원 배열에 데이터를 넣고 빼는 것에 숙달되어서 처음은 데이터를 입력받는 곳에서 엄청난 오류들이 나왔지만 지금은 일단 기본 틀 잡기는 능숙하게 한다.  Character.getNumericValue(ch) 를 사용한 char -> int String.valueOf와 Integer.parseInt에는 익숙하지만 알고리즘을 풀다보면 char형 데이터를 쓸일이 은근 있다. 이때 char형은 원래 int와 데이터 매칭이 되는데 이게 아스키 코드다 보니 그대로 쓸 수는 없다. 이때 이용하는 메서드. Stringtokenizer에 대한 고찰  보통 bufferedReader와 더불어 string으로 나눠주는거에 사용하는데 이 때 readLine에서 라인을 바꾸지 않고 계속 쓰는경우를 좀 고려해봐야한다. 몇몇 문제에서는 코드가 너무 복잡해지는 단점이 있다. 백준 1158 번 문제 요세푸스 순열 중 순열을 원형으로 만들어서 조작을 해야하는 문제가 있었다. 문제 자체의 난이도는 높지않아서 나는 보고 arraylist로 해결했으나 ... 1 2 3 4 5 6 7 8 9 while ( people . size () != 0 ) { if ( index == people . size ()) index = 0 ; for ( int i = 0 ; i < k - 1 ; i ++) { index ++; if ( index == people . size ()) index = 0 ; } sb . append ( people . get ( index )+ ", " ); people . remove ( index ); } 정석적인 방법은 큐를 이용하여 조작하는것이었
이미지
Scanner 와 BufferedReader    
이미지
알고리즘 기본: 재귀  실제 프로그래밍에서는 딱히 안쓰이는 것 같지만, 알고리즘을 위해서는 꼭 알아야 한다는 재귀함수 사용법! 속도면에서 딱히 좋지 않지만 구현이 간단하고 보기에 편하다고 하다. 근데 내 생각은 알고리즘은 무조건 속도 아닌가요 ...? 알 수 없는 알고리즘의 세계... 두가지의 알고리즘 문제를 풀었다.  원재의 메모리 복구 (SW Expert) 반복문으로 간단히 구현을 했다. 쉽게 말해 일정 길이의 숫자가 주어질 때 0에서 1로 또는 1에서 0으로 상태변화가 될 때마다 카운트 해서 반환하는 알고리즘 구현이었는데, 두가지 상태밖에 존재하지 않다 보니 현재 상태를 판단해서 간단하게 구현하였다.  재귀함수가 뭔가요 ( 백준 17478 ) 아니 백준 이놈의 사이트는 대체 어떻게 만들어야 정답 인정이 되는 지 모르겠다. 개인적으로 프로그래머스나 삼성 엑스터트아카데미가 훨훨훨씬 제출의 편의성이나 문제의 가독성이 높은 듯 하다... 문제는 재귀함수를 통해 문장을 반복 출력하는 문제였는데, 나는 어려워서 '-'가 늘어나는 부분과 줄어드는 부분을 구분 지어서 두 가지의 함수로 구현했다. 문제는 그나마 이렇게 구현하니까 시간 안에 이클립스에서는 원하는 결과 값이 도출됐는데... 백준 사이트에서는 뭔 짓을 해도 나오는 "틀렸습니다!" 이거 진짜 화딱지 난다...  (수정...)  나는 언더바를 "___" 세개만 입력했었는데 문제를 다시보니 "____" 네개였다. 이를 수정하니까 바로 정답이라는 백준. 다음부터는 문제를 제대로 살펴보자.