1. 배운내용
1) 알고리즘 코드카타

정답
class Solution {
fun solution(numbers: IntArray) =
(0..9).filter { !numbers.contains(it) }.sum() }
어느순간부터 코드카타를 푸는 것을 포기한 것 같다. 이부분을 어떻게해야 다시 시작할 수 있을까. 지금의 나는 문제를 검색하고 공부하는게 최선인것 같다.
-의식의 흐름
1. contains 개념을 잘 쓰면 쉽게 풀 것 같은 느낌적인 느낌이 들었다
-처음 문제를 어떻게 해결할지 고민하다 떠올린 방식은 반복문을 사용해 없는 0~9 사이의 수를 찾아낸 다음,
더해야겠다고 생각을 했다.
그런데 일단 없는 수를 찾는 것이 비효율적이라 생각이 들었다.
문제에서 요구하는 리턴 값은 없는 수들의 합이기 때문이다.
따라서, '합'이라는 글자가 눈에 띄기 시작했고 이를 중심으로 해결책을 떠올려보았다.
먼저, 0~9 까지 모두 더하고, 있는 숫자들의 합을 빼면 없는 숫자들의 합이 나올 것이라고 생각했다.
그래서 리턴될 answer 변수에 바로 계산식을 대입했다.
하지만, 여기서 IntArray의 모든 요소를 더하는 메소드를 먼저 찾아보았다.
sum() 이라는 메소드를 찾았는데 코틀린 공식 홈페이지에서 찾아보니
IntArray의 sum() 메소드는 리턴 타입도 Int형이라 형변환을 고민할 필요는 없었다.

.contains() 특정 문자열의 포함 여부
fun main() {
var string = "Hello World"
println(string.contains("Hello")) // 출력 : true
println(string.contains("World")) // 출력 : true
println(string.contains("hello")) // 출력 : false -> 대소문자 구분 있음
println(string.contains("korea")) // 출력 : false
println(string.contains("W")) // 출력 : true
}
Kotlin에서 String에 문자가 포함되어 있는지 확인
이 기사에서는 Kotlin에서 String에 문자가 포함되어 있는지 확인하는 다양한 방법을 살펴봅니다.
1. 사용 indexOf() 기능
그만큼 indexOf() 함수는 문자열 내에서 char이 처음 나타나는 인덱스를 반환합니다. 문자가 없으면 반환 -1. 이 값은 아래와 같이 주어진 문자가 문자열에 나타나는지 여부를 확인하는 데 사용할 수 있습니다.
|
fun main() {
val s = "Kotlin"
val c = 'o'
val isExist = s.indexOf(c) != -1
println(isExist) // true
}
|
2. 사용 contains() 기능
또는 다음을 사용할 수 있습니다. contains() 문자열에 문자가 있는지 확인하는 함수입니다.
|
fun main() {
val s = "Kotlin"
val c = 'o'
val isExist = s.contains(c)
println(isExist) // true
}
|
다음과 같이 비교를 대소문자를 구분하지 않도록 할 수 있습니다.
|
fun main() {
val s = "Kotlin"
val c = 'k'
val isExist = s.contains(c, ignoreCase = true)
println(isExist) // true
}
|
3. 사용 in 운영자
문자열에 문자가 포함되어 있는지 확인하는 가장 관용적인 방법은 다음을 사용하는 것입니다. in 운영자. 이것은 호출하는 것과 동일합니다. contains() 기능이지만 더 짧고 읽기 쉬운 구문을 제공합니다.
|
fun main() {
val s = "Kotlin"
val c = 'o'
val isExist = c in s
println(isExist) // true
}
|
Kotlin에서 String에 문자가 포함되어 있는지 확인하는 것이 전부입니다.
2)뉴스피트 프로젝트 진행사항
수정한 부분
package com.sparta.tfbq.domain.member.controller
import com.sparta.tfbq.domain.member.dto.response.MemberResponse
import com.sparta.tfbq.domain.member.service.MemberService
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/api/v1/members")
class MemberController (
private val memberService: MemberService
) {
@GetMapping("/check")
fun checkEmail(@RequestParam("email") email: String): ResponseEntity<Unit> {
memberService.checkEmail(email)
return ResponseEntity.ok().build()
}
@GetMapping("/check")
fun checkNickname (@RequestParam("nickname") nickname: String): ResponseEntity<Unit>{
memberService.checkNickname(nickname)
return ResponseEntity.ok().build()
}
@GetMapping("/tutors")
fun findTutors(): ResponseEntity<List<MemberResponse>>{
return ResponseEntity
.status(HttpStatus.OK)
.body(memberService.findTutors())
}
}
package com.sparta.tfbq.domain.member.dto.response
import com.sparta.tfbq.domain.member.model.Member
data class MemberResponse(
val id: Long,
val email: String,
val name: String,
val nickname: String,
val role: String,
) {
companion object {
fun from(member: Member): MemberResponse {
return MemberResponse(
member.id!!,
member.email,
member.name,
member.nickname,
member.role.name
)
}
}
}
package com.sparta.tfbq.domain.member.repository
import com.sparta.tfbq.domain.member.model.Member
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface MemberRepository : JpaRepository<Member, Long> {
fun existsByEmail(email: String): Boolean
fun existsByNickname(nickname: String): Boolean
}
package com.sparta.tfbq.domain.member.service
import com.sparta.tfbq.domain.member.dto.response.MemberResponse
import com.sparta.tfbq.domain.member.model.MemberRole
import com.sparta.tfbq.domain.member.repository.MemberRepository
import jakarta.transaction.Transactional
import org.springframework.stereotype.Service
@Service
class MemberService(
private val memberRepository: MemberRepository
) {
@Transactional
fun checkEmail(email: String) {
val isDuplicate = memberRepository.existsByEmail(email)
if (isDuplicate) throw DuplicateValueException("email 중복됩니다.")
}
@Transactional
fun checkNickname(nickname: String){
val isDuplicate = memberRepository.existsByNickname(nickname)
if (isDuplicate) throw DuplicatedValueException("nickname 중복됩니다.")
}
@Transactional
fun findTutors() : List<MemberResponse> {
val memberList = memberRepository.findAll().filter { it.role == MemberRole.TUTOR }
.map { MemberResponse.from(it) }
return memberList
}
}
코드 개발설명과 코드 주석이 필요한 부분이 있습니다. 내일 고민해보고 주석 달 수 있으면 달아보려고 합니다.
'개발일지' 카테고리의 다른 글
| 2024.01.15 TIL, KPTF 회고록. (0) | 2024.01.15 |
|---|---|
| 2024.01.12 TIL (1) | 2024.01.12 |
| 2024.01.10 TIL (0) | 2024.01.10 |
| 2024.01.09 TIL (0) | 2024.01.09 |
| 2024.01. 08 TIL (1) | 2024.01.08 |