m42 금요세미나 - 객체지향 프로그래밍/애나그램

짐니·2023년 9월 22일
0

(1)
자율성을 뒷받침하는 캡슐화

  • 객체가행동할때 필요한 상태도 함께 지니고 있어야함

상태 + 행동 = 객체라는 개념이 생긴 근본적인 이유임

메시지: 의사소통수단

수신자가 받은 메시지를 처리하는 방법을 메서드라고 부름

메시지와 메서드 분리는 객체들의 자율성을 증진함

객체지향의 핵심: 메시지를 주고 받는 객체의 관점으로 사고의 중심을 전환하라

(2)아나그램
-문제의 핵심

  • 아나그램을 판별하기
    -부수적 요소들
  • 입력 파싱
  • 출력 형식화
    -추가: TDD? 알고리즘 검증?
  • 출력을 어떻게 검증할 것인가?
    • 출력 문자열을..

해법(1) 정렬을 사용한 방법의 장단점
장점
-생각해내기 쉽다
-결과로 해시맵을 구성할 때 키를 이해하기가 쉽고 키 크기가 비교적 작다
복잡도
-정렬: O(m*lg(m))
-아나그램 판정: 문자열 비교: O(m)...

해법(2) 단어에서 각 문자의 빈도를 세기
복잡도
-빈도 세기
-아나그램 판정
-아나그램 맵구성

변형
-빈도세기+정렬
-아나트리..

2)입력 파싱

1.inputstring.split(",").map{it.trim()}
장점: 쉬움
단점: 여러번 스캔(스플릿한번, trim한번)

2.직접 스캔하면서 처리
inputString.asSequence().filterNot{it.isWhiteSpace()}.forEach{...} or fold
단점: 코드 난해

3.코틀린 splitToSequence 사용
good
inputString.splitToSequence(",").trim()
단어벌로 시퀀스가 생기고, trim을 한다.

3)
테스트 코드

예상 결과를 어떻게 만들어낼 것인가?
-간단한 테스트 케이스는 머리로 직접 생각해낼 수 있음
-아나그램은 문제 없지만, 만약 문제가 복잡하다면?
-문제를 푸는 2가지 이상의 방법을 사용할 것도 고려 가능
-둘 이상의 방식으로 같은 문제를 풀어서 결과가 같은지 검증

-문제 해법을 2가지 다른 방식으로 구현해 결과가 같은지 검증?
-안됨. 해법을 잘못 생각했으면문제
-해답의 property를 검증하는 코드를..

4)다른 고려해야 할점
-입력이 엄청나게 크다면?
-현실적으로 문자열만 몇기가 바이트 x
-그래두
- 만들어질 맵 크기가 엄청나게 커질 수 있음
- 디비 등을 사용
- 디비를 못 쓴다면.. 파일 시스템의 디렉토리 구조를 활용할 수 있을지두~

profile
데브업 종사자

0개의 댓글

관련 채용 정보