코틀린-안드로이드

7일차)알고리즘 문제(대충 만든 자판), git&github-1회차

songyooho 2024. 5. 29. 17:55

>알고리즘 문제

1. 문제

 

2. 솔루션

class Solution {
    fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
        var answer: IntArray = intArrayOf()
        var map=mutableMapOf<Char,Int>()
        for(i:Char in 'A'..'Z'){
            map.put(i,-1)
        }
        for(i:String in keymap){
            for(j:Int in 0..i.length-1){
                //체크할 알파벳
                var tmp=i[j]
                //현재 해당 알파벳의 입력을 위한 클릭수
                val mtmp=map[tmp]?:throw IllegalArgumentException()
                
                //해당 알파벳 입력법이 처음 나왔거나 앞서 저장한 알파벳 입력법보다 입력횟수가 적은경우
                if(mtmp==-1||(mtmp>-1&&mtmp>j)){
                    map[tmp]=j+1
                }
            }
        }
        
        for(i:String in targets){
            var total=0
            for(j:Char in i){
                val tmp=map[j]?:throw IllegalArgumentException()
                if(tmp==-1){
                    total=-1
                    break
                }
                total+=tmp
            }
            answer+=total
            
        }
        
        
        return answer
    }
}

1)mutableMap을 이용하여 A부터 Z까지를 key로 하고 해당 알파벳 입력을 위한 클릭횟수를 value하는 map을 만들음

2)처음 맵 생성시 value를 모두 -1로 해서 입력이 불가능한 알파벳을 구분할 수 있도록 함.

3)map의 value가 nullable이라 에러가 나는 것을 ?:throw IllegalArgumentException() 구문을 통해 예외처리 해서 해결함

=>null인 경우가 존재하지 않는 코드기에 대체값대신 예외처리를 사용

 

3. 새로 알게 된 것.

<1>mutableMap<>()

-선언:주로 mutableMapOf<자료형, 자료형>(key to value, ...)로 선언

-value가 nullable이므로 nullcheck를 잘해야함.

 

<2>null 처리

-함수 사용시 앞이 null일수있는경우: a?.function() 형태로 사용

-null이 나오는 경우 처리: ?:를 사용하면 뒤에 null인경우 대체값을 넣거나 throw를 통해 예외처리할 수 있음

 

 

 

>git&github

 

*터미널 사용법(gitbash): 원하는 폴더에 좌클릭하여 open gitbash here클릭

*복사 붙여넣기는 ctrl+insert & shift+insert

 

1. 필수 리눅스 명령어

 

1)pwd(print working directory): 현재 작업중인 경로

=>경로에 ~로 되어있으면 Desktop상위경로인 Home이라는 경로에 위치해 있음을 뜻함

 

2)ls(list): 폴더 내의 폴더 및 파일 내역

=>ls -a: 숨겨진(보통 .으로 시작)파일내역까지 모두 보여줌

 

3)cd: 해당 위치로 이동

-cd 폴더명: 폴더로 이동

-cd ..: 상위 폴더로 이동동

-cd 상대경로: 해당 경로의 위치로 이동

 

4) mkdir 폴더명: 현재 경로에서 폴더를 생성

 

5) touch 파일명: 현재경로에서 파일을 생성

 

2. git

1)git이란

-코드 변경점 기록

-소프트웨어의 변경사항을 추적,통제하는 것

 

2)git과 github

-git: 코드 변경점 기록

-github: 온라인 백업, 공유, 협업

 

3)git 필수 명령어

<1>git init: 정확한 폴더에서 프로젝트 시작전 한번만 입력하면 됨

=>.git이라는 숨겨진 폴더 생성

<2>git add&commit

-git add 파일명: 커밋할 파일을 지정

=>현재 작업중인 경로내 모든 파일을 지정하려면 파일명에 . 을 찍으면 됨(git add .)

-git commit -m "메세지": 지정된 파일들을 커밋

-git status:변경된 파일중 커밋이 안 된 파일을 체크할 수 있음

<3>git log:커밋 내역과 메세지를 로그형태로 확인할 수 있게 해줌 -버전별 id도 확인 가능

=>end뜨면서 안눌리면 q누르면 됨

-git diff: git add 전 후의 차이점 확인 가능

-git diff '버전id1'..'버전id2': 두 버전간 차이점 확인

-git reset --hard `버전id` : 버전 id로 돌아가는 명령

-git revert `버전id` : 버전 id의 커밋을 취소한 내용을 새로운 버전으로 만드는 명령

 

3.github

1. git repository만들어 업로드하기

-repository생성

-업로드한 폴더의 터미널을 열어 새로생긴 repository페이지의 붉은 박스내 코드 입력

붉은 박스의 코드 입력

2.협업

1)코드 복사해오기:

-깃허브 repository에서 주소 복사해옴

-복사할 폴더에서 터미널을 열어줌

-git clone 주소 .: 점찍는것 잊지 않기

 

2)코드 변경 후 올리기

-우선 git add &commit

-git push origin 브랜치명: 우선은  main으로 작성

 

3)다른사람이 작성한 코트 가져오기

-git pull origin 브랜치명: 일단은 main

-push전에 다른사람이 이미 push했으면 에러발생 =>git pull

-git pull에서 에러발생시 merge에 해당하는 힌트인 구문 입력후 다시 pull

=>git config pull.rebase false

-vim에디터가 뜨는 경우:esc누른 후 :wq 입력