99클럽 코테 스터디 2일차 TIL + 경우의 수…를 구하자…

Yellta·2024년 5월 21일
0

TIL

목록 보기
4/73

99클럽 코테 스터디 2일차 TIL + 경우의 수…를 구하자…

오늘 알고리즘을 풀면서 알게된 것은 c++의 간략한 해쉬 사용법 그리고 경우의 수 공식ㅋ (중학교때 했던 것)

오늘의 학습 키워드

경우의 수…

공부한 내용 본인의 언어로 정리하기

경우의 수.

간단하다.

A=X개

B= Y개

C= Z개

이렇게 있을 경우에 X,Y,Z를 뽑는 모든 조합은? → XYZ이다.

어린시절을 떠올려서 이렇게 말이다.

위의 문제같은 경우에는 갯수 +1을 해줘야한다.(벗은 경우이다.)

배경이 날아가벌임 아무튼

점선으로 표시된 도형이 투명한 도형이라고 치자

그럼 우리는 경우에 수에 투명한 도형까지 추가할 수 있다. 그래서 +1을 해주는 것

오늘의 회고

조합, 콤비네이션, 팩토리얼

은근하게 코딩테스트 문제에서 자주본다. 아직 어떤 상황에서 어떤 알고리즘을 사용해야 하는지 모르는 것 같다.

조합 : n개의 주머니에서 1개씩 뽑아서 정렬

A=X개

B= Y개

C= Z개

이렇게 있을 경우에 주머니 A,B,C에서 X,Y,Z를 하나씩 뽑아서 만드는 모든 조합은? → XYZ이다.

콤비네이션 : n개의 주머니에서 k개씩 뽑기

nCk 이건 유명하니까 수식은 생략하겠다...

어떤 문제가 있었고, 나는 어떤 시도를 했는지

해당 문제를 풀다가 발견

일단 나같은 경우에는 종류별로 하나씩 입고있는 경우

모두 벗고있는 경우

이 경우를 따로 생각했다. 그래서 간편하게 돌아갈 수 있는 길도 저 멀리 돌아간듯 ㅋ

[IDEA]
[[a,A],[b,B],[c,C]]의 형식 참고로 옷을 추가로 입는 경우도 존재한다.
[[a,A],[b,A],[c,A]]의 입력도 주어진다.

같은 이름을 가진 의상은 존재하지 않는다. 즉 중복하지 않으니까 신경 안써도 됨
(원소가 여러개인 경우)
A = {a,b,c}
B = {d,e}
C = {f,t,y}

결과 = A,B,C의 원소수 + (A*B*C의 원소수) 가 정답이 된다.

주어지는 값 배열을 뽑아서 1번째 인덱스를 key로 두고 수를 count한다.A =3
B= 2
C =3
이런식으로 변경함
A,B,C 원소수 다 더하고 다곱한값도 다 더하면 return 값임

(원소가 여러개가 아닌 경우 map.get의 값이 모두 1인 경우)
map의 크기+1 + (map의 size ...1까지의 합)이 값이 된다.

4.최소 한개는 입는다. -> 한 개인 경우도 존재한다.
map의 size가 1이면 그냥 개수 출력하면 됨

[수도코드]
1. 배열 받기
2. 받은 배열 for문 돌리기
   꺼낸 배열 A[1] key getOrDefault(key, 0)+1 해주기
3. 구한 맵에서 key값으로 sum과 multiple의 값 구하기
    두개 더한 값을 answer에 넣기
    map을 돌리면서 map의 사이즈가 1인지 판별
    
4. 모든 map의 사이즈가 1인 경우 map의 크기+1 + (map의 size ...1까지의 합)리턴하기

*/

처음에 짠 수도코드이다.

보다싶이 경우의 수를 따로 판별해서 식이 좀 복잡해졌었다.(그리고 또 틀림)

문제 푸는 시간은 얼마 안걸렸지만 제출하고나서 깜짝놀랐다.(28퍼만 맞아서)

어떻게 해결했는지

사실 약 25분정도 더 정답을 끌어내려다 실패하고 답안을 봤다.

조합을 이용해서 푸는 문제

내가 생각한 아이디어와 어느정도 일치했지만 다 벗은 케이스를 +1로 추가해서 계산한다는 것이 달랐다.

무엇을 새롭게 알았는지

조합에 대해서 아주 조금 맛보기를 하게 되었다.

그리고 c++에서 해쉬를 사용하는 것도

물론 난 지금 java를 통해서 코테 스터디를 하고 있지만 코테 언어는 c++로 본다.

그래서 java로도 풀고 c++로도 푼다.

아무튼 c++의 해쉬를 이용하는 법을 어제랑 또 다른 방법으로 알게되었다.

unordered_map<string ,int> HashMap; //선언
hashMap[]++ -//> 값에 해당하는 value +1  value의 초기 값은 0이다. 

for(auto c : HashMap)
	c.first //key
	c.second //value

내일 학습할 것은 무엇인지

  1. 프로젝트
    API를 수정해야한다… ㅠㅠ json파일을 읽어서 파싱해야하는데 문제는 json파일의 저장형태가 json이 아니라 ArrayList<Map<String,String>>혹은 ArrayList<map<String, ArrayList>>이런 경우가 있어서 생각보다 엄청 까다롭다.
  2. CS공부하는 날~~(근데 오늘 바빠서 경험정리 못함)
  3. 오늘 못푼 비기너 문제, 챌린지문제 도전해보기
    오늘은 미들러문제만 풀었다. 어제는 다 풀었는데 ㅠ 하지만 바빳는걸
  4. 내일 코테문제 열심히 풀기~~
    항해에서 주는 문제 열심히 풀기

1. Subject : Spring MOCK mvc

1. What I learn?

Spring Mock MVC를 통해서 get요청을 날리고 해당 값을 가져오는 것

2. What I did?

@AutoConfigureMockMvc//이거뺴니까 mockMVC bean없다고 헀음
...
@Autowired
MockMvc mockMvc

3. How did It work?

GET요청의 결과를 확인할 수 있었다!!!

4. What I know

SpringMockTest는 단위테스트와 통합테스트의 중간이라고도 한다.

그리고 로컬에서 테스트를 수행하는 것보다 신경써야할 것들이 훨씬 적어진다!!!

로컬에서 돌리면 로컬세팅에 맞춰서 파일 경로나 사용하는 리소스들이 달라지기 떄문에 전부다 바꿧다가 서버에서 돌릴때 로컬세팅으로 돌아간다면 대참사이다. MockTest를 사용함으로써 Test는 Test의 profile만 갖고 운영할 수 있다. (짱임)

5. Review

Spring MOCK TEST에 관해서 정말 간단하게 알아본 것이라서 어떤 방식으로 사용하는지 좀 더 알아볼 필요가 있는 것 같다.

2. Subject : API에 관한 고찰

1. What I think?

Spring을 사용하면 controller에서 반환할 떄 객체형식을 자동으로 JSON형식으로 형변환 해준다. 정말 고맙다.

하지만 객체를 String으로 저장하고 그 객체를 JSON 형태로 파싱하는 것은 조금 다르다. 그런 경우

String으로 파일을 만들어서 해당 파일을 읽고 객체로 파싱해야하는데 생각보다 손도 많이가고 고칠 것이 많다.

그렇다면 처음부터 API를 JSON으로 설계해야만 했었을까?

2. Review

해당 질문의 답은 아직 구하지 못했다. 나중에 이것도 답안을 구해봐야지

#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

profile
Yellta가 BE개발해요! 왜왜왜왜왜왜왜왜왜왜왜왜왜왜왜왜왜왜왜 가 제일 중요하죠

0개의 댓글