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 |