오전1: 알고리즘 한문제
수능 국어 비문학 푸는 줄 알았다. 문제 자체는 단순구현이라 쉬워보였다
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// survey_len은 배열 survey의 길이입니다.
// choices_len은 배열 choices의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* survey[], size_t survey_len, int choices[], size_t choices_len) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(5);
int scores[8] = {0};
const char* mbti = "RTCFJMAN";
answer[4] = '\0';
for(int i = 0; i < survey_len; i++){
int score = choices[i] - 4;
if(score > 0){
for(int j = 0; j < 8; j++){
if(mbti[j] == survey[i][1]){
scores[j] += score;
break;
}
}
}
else if(score < 0){
for(int j = 0; j < 8; j++){
if(mbti[j] == survey[i][0]){
scores[j] -= score;
break;
}
}
}
}
for(int i = 0; i < 4; i++){
answer[i] = scores[i * 2] >= scores[i * 2 + 1] ? mbti[i * 2] : mbti[i * 2 + 1];
}
return answer;
}
처음엔 switch case를 써서 하나 하나 노가다를 했는데
하다 보니까 현타오고 더 쉬운 방법이 없을까 고민하다가 4를 빼면 점수의 절댓값이 나온다는 걸 알아챘다.
그래서 쉽게 풀 수 있었다.
다른 사람들 풀이가 궁금해서 찾아보니까 이런 풀이도 있었다.. 진짜 상남자다
이제 백준에서 알고리즘 종류별로 좀 공부를 해야겠다. 슬슬.. 단순구현이나 수학이 아닌 문제들이 많이 보인다ㅠㅠ.
근데 요즘 공부할 게 너무 많아서 정신이 없다 ㅋㅋㅋㅋ 재밌는 게 너무 많은걸!
오전2-오후1: JAVA 강의 수강 (3주차 까지)
java는 아무래도 고급 언어라 그런가, 남이 쓴 코드를 보고 해석하긴 쉬운데 내가 좋은 구조를 짜기가 참 어렵다. 강의도 한번만 봐서는 개념이 다 와닿지가 않는다. 그동안 야매로 썼던 코드들이 부끄러워진다.. 정리하고 내 코드에 적용하는 시간까지 다 마쳐야 감을 잡을 수 있을 것 같다.
3주차 숙제 : 계산기 만들기
처음엔 쫄았는데 찬찬히 읽어 보니까 생각보단 할 만(?) 했다. 인텔리제이가 자동으로 코드를 완성시켜준다;; 여태 써 본 프로그램 중에 제일 편하다. 클래스를 이상한 곳에 생성하면 파일도 만들어준다. github이랑 연동도 되고 오류도 바로바로 잡아주고 굳굳
처음에 sout이랑 입력값만 받으니까 사용자가 이상하게 입력 시 불편한 에러가 떠서 예외 처리랑 인풋미스매치 어쩌고를 넣어줬다.
넣으니까 임포트도 인텔리제이가 지맘대로 해줬다.흥.. 나도 쓰고싶은데
try catch등의 예외 처리는 4주차에서 배우는 것 같다.
이거도 얘가 써준거다. 난 그냥 sout "에러떳슴다" 할랬는데 탭 누르면 그냥 완성되길래 했다
위에 것들은 Main이고 이건 생성자 부분. 우선 추상 클래스 Abs-에서 연산 객체들을 받아와서 초기화시켜준다.
setter를 사용하는 방법도 있는데 난 그냥 생성자로 했다.
연산 개체들이 Cal- 클래스에 주입되고 이를 통해 특정 연산을 수행할 수 있다.(의존성 주입)
Main에서 클래스에서 calculate 메서드를 통해 operator, first, second를 받아서
operator에 따라서 operate메서드를 호출하여 first, second로 연산을 수행한다
추상 클래스(Abs-) 는 생략
이건 Abs-를 상속받은 Div-클래스다. operate를 상속받아서 나눗셈을 해준다.
메서드 오버라이딩을 통해 구현된 다형성이다.
0으로 나누면 결과가 에러가 뜨니깐 나눗셈에만 예외 처리를 해줬다. 다른 연산 클래스들도 이것과 똑같이 만들어줬다.
굳
저녁: JAVA 용어정리 2
https://roqkfchqh.tistory.com/41
게임 만드는 거 class 좀 나누고 이것 저것 추가하다가 자야겠다.