코틀린/코딩테스트

코딩테스트 [편지]

정혜현 2024. 6. 24. 09:44

문제

머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.


 

풀이

1. 접근

1.1 관찰

문자열의 길이 *2를 반환하는 문제

입력 : 문자열

출력 : 정수

 

1.2 계획 

문자열 길이에 2곱하기 : length*2

answer에 담기 : toInt()로 담기

 

 

 

2. 시행착오

2.1 시도

 

class Solution {
    fun solution(message: String): Int {
        var answer: Int = 0
        answer = message.length * 2.toInt()
        return answer
    }
}

 

검증결과 : 성공

최대한 줄였다.

class Solution {
    fun solution(message: String): Int = message.length * 2.toInt()
}

 

 

 


회고

 

그러고보니 왜 length에는 괄호가 안들어갈까 궁금해졌다.

val length: Int

Returns the length of this character sequence.

 

length는 문자 시퀀스, 즉 문자열의 길이를 반환해주는 속성이었다. 붙여서 쓰는 건 모두 메소드라고 생각했는데 프로퍼티도 있다는 걸 깨닫게 됐다.

 

이 문제는 공백을 포함하기 때문에 바로 해결됐는데 공백을 제외하고 유효한 문자의 개수만 반환해야 될 때도 있을 것이다. 반복문과 조건문 없이 유효한 문자만 셀 수 있는 메소드나 프로퍼티가 있을까?

 

찾아보니 바로 반환해주는 방법은 없는 것 같고 replace()메소드로 공백을 제거하는 방법이 제일 많이 나온다. 인자에는 (변경전 문자 또는 문자열"", 변경후 문자 또는 문자열 "")을 넣어주면 되고 replace(" ","")로 공백을 제거할 수 있다.

 

정규표현식도 많이 나와서 같이 알아봤다.

정규식 정규표현식 Regular Expressions; Regex

특정한 규칙의 문자열 집합을 표현하는 식. 연산기호인 메타문자를 이용해 특정 조건에 만족하는지 판별할 때 주로 사용. Regex클래스로 Regex(정규식)로 객체생성이 가능하고, matches(정규식, 대상)로 검사할 수 있다.

 

메타문자

^ : 문자열의 시작
"""^Condition"""  -> Condition으로 시작하는 문자열인가?
$ : 문자열의 끝
. : 임의의 한 문자 
[ ] : 대괄호에 있는 문자 중 한 개를 의미 
[ABC]는 A, B, C 중 하나
[^] : not
[^ABC]는 A, B, C를 제외
| : or
A|B는 A or B를 의미
? :? 바로 앞의 문자가 0개 또는 1개
A? B는 AB , B를 의미
* :  * 바로 앞의 문자가 0개 이상
A*B는 B,AB, AAB, AAAB 
+ : + 바로 앞의 문자가 1개 이상
A+B는 AB,AAB,AAAB
{ N } : 문자가 N개 반복
A {2} B는 AAB
{N,} : 문자가 N개 이상 반복
A {2,} B는 AAB, AAAB, AAAAB
\s : 공백제거
\d : 숫자를 의미
\d와 [0-9]는 의미가 동일하다. 숫자만을 의미
\w : 숫자와 알파벳을 의미
\w는 [a-zA-z0-9]와 동일하다

 

사용예시

숫자만 :  ^[0-9]*$
영문자만: ^[a-zA-Z]*$
한글만 : ^[가-힣]*$
영어 & 숫자만 : ^[a-zA-Z0-9]*$
Email : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
Phone : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
주민등록번호 : \d{6} \- [1-4]\d{6}

 

출처 : https://jja2han.tistory.com/m/361   https://standuplee.tistory.com/11