https://school.programmers.co.kr/learn/courses/30/lessons/176963

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

name리스트는 이차원 리스트다 name[i]가 ["may", "kein", "kain"]이고  그리움 점수 yearning가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 전체 name 리스트의 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요.

index를 찾으려는 값이 없을경우 ValueError가 나기 대문에 try: 를 이용해봤다.

def solution(name, yearning, photo):
    answer = []
    for arr in photo:
        point = 0
        for arr_name in arr:
            try:
                idx = name.index(arr_name)
                point += yearning[idx]
            except ValueError:
                point = point
        answer.append(point)        
    return answer

아래는 다른분 풀이이다. dictionary를 미리 만들고 검색을 해서 점수를 더하는 방식이다.

def solution(name, yearning, photo):
    dictionary = dict(zip(name,yearning))
    scores = []
    for pt in photo:
        score = 0
        for p in pt:
            if p in dictionary:
                score += dictionary[p]
        scores.append(score)
    return scores

 

https://plusthemath.tistory.com/393

 

[수리논술] 사이클로이드의 등시성과 최단강하곡선

[제시문] [가] 사이클로이드(cycloid)란 한 원이 일직선 위를 굴러갈 때, 이 원의 원둘레 위의 한 점이 그리는 자취이다. 예를 들어 자전거 바퀴의 한 점에 전구를 설치하고 자전거를 일정한 속력으

plusthemath.tistory.com

곡선의 거리를 계산하는 방법

https://www.youtube.com/watch?v=KVIEAFAwCNE 

 

코틀린에서 CharSequenceString, StringBuilder 등 문자열과 관련된 클래스들이 구현하는 뼈대 인터페이스

val seq: CharSequence = "Hello"
println(seq.length) // 5
println(seq[2]) // l
println(seq.subSequence(1, 4)) // ell

// 접두사, 접미사 관련
val str1: CharSequence = "https://www.naver.com"
println(str1.startsWith("https://")) // true
println(str1.endsWith(".com")) // true
println(str1.removePrefix("https://")) // www.naver.com
println(str1.removeSuffix(".com")) // https://www.naver
println(str1.removeSurrounding("https://", ".com")) // www.naver

// 비어 있는지 검사하기
val emptyStr = ""
val whiteSpaces = " "
val nullStr: String? = null
println(emptyStr.isEmpty()) // true
println(whiteSpaces.isEmpty()) // false
println(emptyStr.isBlank()) // true
println(whiteSpaces.isBlank()) // true
println(nullStr.isNullOrEmpty()) // true
println(nullStr.isNullOrBlank()) // true

// 가공하기
// removeRange, padStart, padEnd, trimStart, trimEnd, trim, slice, subSequence, substring, reversed 등 제공

// 쪼개기
val hello: CharSequence = "안녕하세요.\n고맙습니다.\n반갑습니다."
val time: CharSequence = "2018-01-22"
println(hello.lines())
for (line in hello.lineSequence())
  println(line)
println(time.split('-'))
// [안녕하세요.,고맙습니다.,반갑습니다.]
// 안녕하세요.
// 고맙습니다.
// 반갑습니다.
// [2018, 01, 22]

// 문자열 찾아 바꾸기
val adage = "Love begets love."
println(adage.replace("love", "hate", ignoreCase = true))
println(adage.replaceFirst("love", "compliment", ignoreCase = true))
println(adage.replaceRange(5..10, "hello"))
// hate begets love.
// compliment begets love.
// Love hello love.

// 문자열 덧붙이기
val builder = StringBuilder().append("2018").append(" Pyeongchang")
var result = builder.toString()
println(result) // 2018 Pyeongchang

// 정규식 다루기
val regex = Regex("[0-9]+")
val str = "4324235"
val str2 = "324 6546 5432"
println(regex matches str) // true
println(regex matches str2) // false
println(regex.replace(str2, "숫자")) // 숫자 숫자 숫자

문자열 추가하고 병합하기 (substring)

s = "abcdef"
println(s.substring(0..2)) // abc
s = s.substring(0..1) + "x" + s.substring(2..s.length-1) // abxcdef

문자열 비교하기 (compare)

var s1 = "Hello Kotlin"
var s2 = "Hello KOTLIN"
// 같으면 0, s1<s2 이면 양수, 반대면 음수를 반환
println(s1.compareTo(s2))
println(s1.compareTo(s2, true)) // 대소문자 무시

StringBuilder 사용하기

: StringBuilder를 사용하면 문자열이 사용할 공간을 좀 더 크게 잡을 수 있기 때문에 문자열이 자주 변경되는 경우에 사용하면 좋습니다.

var s = StringBuilder("Hello")
s.append("World")
s.insert(10, "Added") // 인덱스 10번부터 추가
s.delete(5, 10) // 인덱스 5번부터 10번 전까지 삭제

기타 문자열 처리

: 소문자/대문자 변경(toLowerCase, toUpperCase), 특정 문자 단위로 잘라내기(split), 앞뒤 공백 제거(trim)

var deli = "Welcome to Kotlin"
val sp = deli.split(" ")
println(sp) // [Welcome, to, Kotlin]

// 하나 이상의 분리 문자를 지정
...
str.split("=", "-")

문자열을 정수로 반환하기 (toInt)

val number: Int = "123".toInt()

...
try {
  "12w".toInt()
} catch(e: NumberFormatException) {
  println(e.printStackTrace())
}

만일 숫자가 아닌 문자가 포함되었을 때 null을 반환받고자 한다면 toIntOrNull()을 사용할 수 있습니다.

형식 문자 사용하기 (format)

val pi = 3.1415926
val dec = 10
val s = "hello"
println("pi = %.2f, %3d, %s".format(pi, dec, s))

'Kotlin > String' 카테고리의 다른 글

문자열 클래스 String, StringBuffer, StringBuilder  (1) 2022.09.13
StringBuilder  (0) 2022.09.13
String  (0) 2022.09.12

+ Recent posts