분류 전체보기 56

[Kotlin/프로그래머스] 다리를 지나는 트럭

[문제소개] 트럭을 1칸, 다리를 N (문제의 bridge_length) 칸이라고 했을 때 각 트럭 무게와 다리 무게제한을 고려하여 모든 트럭이 지나가는 데 걸리는 초를 구하는 문제 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr [나의 풀이] 일단 매 초마다 루프를 돌면서 각 반복마다 일차원 조회를 하면 O(N^2) 이고 N 이 10000이므로 시간초과가 날 가능성 때문에 O(N) 으로 풀 수 있는 방법을 고민했다. 그렇다 해도 입력에 따라 결과가 달라지고 경우의 수도 많으므로 시..

[Kotlin/프로그래머스] 거리두기 확인하기 (2021 카카오 채용연계형 인턴십)

코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr [문제 소개] 1. 5 * 5 이차원 배열의 대기실이 주어졌을 때 2. 맨해튼 거리로 2 이하가 되게 사람이 존재해서는 안된다는 거리제한 조건 3. 단, 벽이 존재하여 상하좌우 4방향 기준으로..

[Android] 도메인(패키지명) 변경에 주의할 점

프로젝트를 진행하다가 도메인 네임을 변경해야할 상황이 생겼다. 프로젝트를 만든지 얼마되지 않았다면 그냥 새로 파서 코드를 옮겨도 되겠지만 이미 상당부분 진행되어서 Refator - Rename 을 눌러서 바꿔주기로 했다. 하지만 작업하는 파일들의 상단에 위치한 만큼 수동으로 손 봐줘야 할 일이 생겼다. 모든 항목을 다 바꿔주지 않았을까 하는 안일한 생각을 했다가 'No matching client found for package name ~ ' 같은 에러나 패키지명이 업데이트 되지 않은 파일들에 대해 'can not find symbols' 같은 에러를 만나게 되었다. 패키지명 바꾸는 방법 Android Studio 좌측 'Project' 탭을 클릭하고 패키지를 클릭후 위 사진에서 module_basic..

[Kotlin/프로그래머스] 콜라츠 추측

요즘 코틀린의 문법에 빠르게 익숙해지기 위해 프로그래머스 Level 1 부터 문제를 풀어보고 있다. 알고리즘 풀다가 자주 마주하는 Int 오버플로우 문제가 나와서 실수하지 않기 위해서 글을 작성한다. 문제 소개 정수가 하나 주어지면 아래와 같은 과정을 거쳐서 1이되는데 몇번이나 그 과정을 거쳐야하는지 반환하는 문제이다. ( 자세한 문제 내용은 아래 링크에서 확인 ) 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. https://programmers.co.kr/learn/courses/30/lessons/12943 코딩테스트 연습 - 콜라츠 추측 1937년 Collatz란 사람에 의해 ..

[Kotlin] Pair , Triple 과 Destructure

Pair 와 Triple 은 코틀린에서 미리 만들어놓은 data class 이다. 둘 다 Tuples 파일에 정의되어있다. 즉 이것도 클래스임을 다시 생각하며 아래를 보자 - Pair 만들기 ( to 키워드, List.partition() ) to 키워드로 Pair 를 만드는 방법은 간단하다. 변수 사이에 to 를 넣으면 된다. val equipment = "fish net" to "catching fish" println("${equipment.first} used for ${equipment.second}") 요소끼리 타입이 같지 않아도 된다! 위 코드에서 equipment 의 타입은 Pair 이다. 안의 타입을 바꾸면 타입도 다르게 할 수 있을 것이다. 즉 아래와 같이 작성이 가능하다. fun ma..

Kotlin 2021.08.05

[Kotlin] 상속/ interface/ abstract class/ object/ data class/ enum class

- open 키워드와 상속 다른 클래스를 상속하는 방법은 현재클래스이름(생성자) : 상속클래스이름(생성자) 코틀린은 default 로 부모 클래스의 properties 와 member variables 를 private 이 아닌 이상 접근은 가능하지만 override 할 수 없다. 자식클래스가 override 할 수 있게 하려면, 부모클래스에서 open 키워드를 사용해야한다. 클래스는 물론 생성자에 있는 멤버변수 모두에 각각 open 키워드를 붙이고 하위클래스에서 override 할 수 있다. open class Aquarium constructor(open var width: Int = 20, open var height: Int = 40, open var length: Int = 100) { open..

Kotlin 2021.08.05

[Kotlin] 접근제어자 ( visibility modifiers )

- default 접근제어자 public 코틀린의 모든 default 접근제어자는 public 이다. 그래서 따로 접근제어자를 지정해주지 않는다면 class, methods, properties, member variables 등에 모두 접근이 가능하다. - 접근제어자가 붙을 수 있는 키워드들 classes, objects, interfaces, constructors, functions, properties, 그리고 그들의 setters 에 -public 클래스 밖에서도 접근할 수 있다. 위에서 언급한 것처럼 따로 지정해주지 않으면 default 로 public 이 적용된다. - internal 모듈 내에서만 접근이 가능하게 하는 접근제어자이다. 여기서 모듈이란 함께 컴파일되는 코틀린 파일들의 집합을 ..

Kotlin 2021.08.04

[Kotlin] Class (constructor, getter/setter, companion object) 기초

간략한 소개 class classs 는 object 의 청사진이다. 붕어빵틀과 붕어빵 개념? 일 것 같다. codelabs 에서는 Objects are instances of classes 라고 한다. 참고. interface Interface 는 다른 Class 가 구현해야하는 함수에 대한 specification 이다. codelabs 에서는 어항 클래스가 있고 청소 인터페이스가 있다고 했을 때, 청소는 어항말고도 가전제품, 집, 사무실 등 여러 다른 클래스에서도 쓰일 수 있기 때문에 청소를 인터페이스로 빼고 어항 클래스에서 청소 인터페이스를 구현하는 예시를 들어주었다. - 생성자 - 생성자를 클래스 옆에 constructor() 안에 함수 parameter 처럼 쓸 수 있다. ( 그래서 defaul..

Kotlin 2021.08.04

[Kotlin] lambda 와 higher-order function

- lambda 람다는 함수를 만드는 expression 이다. 함수의 이름을 정의하지 않는다. 이름 없이 함수를 사용할 수 있다. 그래서 anonymous function 이라고도 불린다. 람다는 데이터로 전달될 수 있다. var dirtyLevel = 20 val waterFilter = { dirty : Int -> dirty / 2} println(waterFilter(dirtyLevel)) 위와 같이 람다를 정의할 수 있는데 -> 왼쪽에는 parameter 가 있고 뒤에는 return 이 있다. 함수를 가지는 변수를 만들고 호출할 수도 있다. val waterFilter: (Int) -> Int = { dirty -> dirty / 2 } 위와 같이 type 도 더 명확하게 지정해줄 수 있다. ..

Kotlin 2021.08.03

[Kotlin] 함수 기초 (선언, 반환, default value, compact functions)

- 기본 함수선언 틀은 다음과 같다. fun 함수이름(인자): 반환형 { 바디 } - 리턴값이 없는 함수 자바에서 리턴타입이 void 이면 void를 적어주었다면 코틀린은 그냥 : 반환형을 생략하면 된다. fun 함수이름(인자) { 바디 } 이런 함수는 kotlin.Unit 을 반환한다고 생각하면 된다. 코틀린에서 값이 없다는 뜻이다. - main() 함수는 실행의 entry point 이다. command line arguments 가 string 의 배열로 전달된다. fun main(args: Array) { println("Hello World") } 1.3 버전 이후로는 main 함수에 파라미터를 쓰지 않아도 된다. IntelliJ 에서 커맨드라인을 주는 방법은 Run > Edit Configur..

Kotlin 2021.08.03