개발일지

2024.01.10 TIL

과일바구니♡ 2024. 1. 10. 20:59

1. 배운내용

  1)알고리즘코드카타

 

정답

class Solution {

    fun solution(phone_number: String): String {
        return solveHelper(phone_number.map { it.toString() }.reversed(), 0)
    }

    private tailrec fun solveHelper(
        l: List<String>,
        count: Int,
        acc: List<String> = listOf()
    ): String = when {
        l.isEmpty() -> acc.joinToString("")
        count >= 4 -> solveHelper(l.drop(1), count + 1, listOf("*") + acc)
        else -> {
            val head = l.first()
            solveHelper(l.drop(1), count + 1, listOf(head) + acc)
        }
    }

}

 

class Solution {
        fun solution(phone_number: String): String {
       var answer = ""

       answer = "*".repeat(phone_number.length - 4)+ phone_number.substring(phone_number.length - 4)

       return answer
    }
}

 

class Solution {
    fun solution(phone_number: String): String {
        var answer = ""
        var stars = ""

        for(i in 0..phone_number.lastIndex-4) stars += '*'

        answer = phone_number.replaceRange(0..phone_number.lastIndex-4, stars)

        return answer
    }
}
class Solution {
    fun solution(phone_number: String): String {
        var answer = ""

        for( (index, value) in phone_number.withIndex()) {

            if(index  < phone_number.length-4) {
                answer += "*"
            } else
                answer += value

        }

        return answer
    }
}

 

class Solution {
    fun solution(phone_number: String): String {
        var answer = ""
        for(c in phone_number.mapIndexed { index, c -> if(index >= phone_number.length - 4) c else '*' })
            answer += c
        return answer
    }
}

 

모르겠다..;;;;

구글 검색해서 찾은 내용이다.

 

먼저 입출력 자료형을 봤을 때 둘 다 String형이다.

그러고 나서 이 문제를 보니 단순히 맨 끝 4자리만 놔두고 그 전까지 반복문을 통해 *로 문자열을 바꿔주면 될 것이라 생각했다.

그래서 자바에서는 String형 변수의 인덱스에 해당하는 글자를 charAt() 메소드로 가져올 수 있었다.

코틀린에서는 get() 메소드로 인덱스에 해당하는 문자를 가져올 수 있었다.

다른 방법으로는 배열처럼 []를 사용해 안에 인덱스 번호를 주면 똑같은 동작을 시킬 수 있었다.

내가 이해하고 있는 차이점은 get()은 보다시피 메소드이고,

[]를 사용해 인덱스 번호로 호출하는 것은 어떻게 검색해야할지 몰라서 안드로이드 스튜디오의 편집기 기능을 빌려 보니

영어로는 indexing operator라고 한다.

 

주어지는 phone_number의 첫번째 인덱스부터 마지막 4글자전까지는 answer 변수에 "*"을 추가하고,

이후 마지막 4글자는 주어진 글자 그대로를 리턴될 answer 변수에 추가했다.

 

1. string을 mutableList로 변환
2. 뒤 4자리를 제외한 나머지 앞자리를 "*"로 set
3. 구분자없이 string 변환

 

2. 뉴스피트 프로젝트 진행

프로젝트명: 물어보기전에 생각했나요?(학생이 튜터에게 질문을 하는 커뮤니티)

-ERD 다시 작성됨

-역할배분: 박지영- 멤버 회원가입 ID 중복확인, 닉네임 중복확인, 튜터 전체조회. 생성, 조회, 업데이트, 삭제, api 참고

                이인재- 멤버중 특정 튜터 조회. 생성, 조회, 업데이트, 삭제, api 참고

                 허 훈-  질문과 대답 담당, 회원가입 담당.  생성, 조회, 업데이트, 삭제, api 참고

                백승한- 사이트 인증 인가(로그인 기능)기능, api 참고

 

- 내가 맡은 코드개발 진행

 어제 파일과 클래스, 데이터 클래스, 인터페이스는 만들었다. 내용은 작성하려고 시도중이다.

 

-작성된 코드

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.toString())
        }
    }
}

 

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.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().map { MemberResponse.from(it) }.
        filter { it.role == "TUTOR" } 
        return memberList
    }
}

 

commit -m 

Feat: 멤버 회원가입시 ID, 닉네임 중복확인, 튜터 전체 조회 기능
-docs
- MemberController: 회원가입시 이메일,닉네임 중복확인, 튜터 전체조회 기능
- MemberResponse:멤버 정보 응답내용, Member Response 변화코드
- MemberRepository: 이메일, 닉네임 중복체크 Boolean 값
- MemberService: 이메일, 닉네임 중복체크, 튜터전체조회(필터-역할이 튜터일 경우 자료 반환)

 

git 명령어

git add . /git commit(메시지 작성법에 맞게 작성)/ git push origin feat/#9 / 깃허브 아이디 엔터/깃허브 패스워드- 토큰 발급해서 복사 붙여넣음 엔터/ 깃허브 올라감. 

git branch 엔터- 현재위치 알 수있음.

코드 개발부분에서 미진한 부분들이 있어, 다른 팀원들의 도움을 받았습니다. 

역할배분 받아서 개발이 완료된 부분은 깃허브에 올리고, pull requests 에 생성하여 리뷰요청하고 끝냈습니다.

코드들은 다시 쳐보면서 한번더 볼 예정입니다.

'개발일지' 카테고리의 다른 글

2024.01.12 TIL  (1) 2024.01.12
2024.01.11 TIL  (0) 2024.01.11
2024.01.09 TIL  (0) 2024.01.09
2024.01. 08 TIL  (1) 2024.01.08
2024.1.5 TIL  (1) 2024.01.05