DTO/bean/vo

1. 게시판 board

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
 
import lombok.Data;
 
@Data
public class Board extends Pagination{
    
    private int boardId;
    public String bUsername;
    private String bTitle;
    private String bContent;
    private Timestamp bDate;
    private int bHit;
    private int bGroup;
    private int bIndent;
    private int bStep;
    
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 
 

2. 회원 Boardmember

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
import lombok.Data;
 
@Data
public class Boardmember {
    private int memberId;
    private String username;
    private String password;
    private String email;
    private String gender;
    private Timestamp joinDate;
    private Timestamp birthday;
    
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

3. 댓글 Comment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
import lombok.Data;
 
@Data
public class Comment {
 
    private int commentId;
    private int boardId;
    private String username;
    private String content;
    private Timestamp cDate;
    private int cGroup;
    private int cIndent;
    private int cStep;
    private int cLike;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

'ETC' 카테고리의 다른 글

Controller  (1) 2019.11.14
Service interface + ServiceImpl class  (0) 2019.11.14
Paging  (0) 2019.11.14
Mapper interface + Mapper xml  (0) 2019.11.14
Caleb Curry's Database design course  (0) 2019.11.08

I wanted to create a mini project where i designed from start to end by myself since during my time in the bootcamp, I always worked with others on all of my projects. For past week, I started studying algorithm because I just finished up my bootcamp courses about a month ago, and took two weeks to prepare for an korea engineer exam(?) and finally had some time to study things I wanted to study which is algorithms. But I realized I first need to find a job first to improve my skills as a developer. Because having first hand experience inside the field is much much better than doing mini projects and studying from books by myself. So my goal is to first find a job that suits my needs and then start studying things I want to study again. 

And as a starting junior developer, the most important thing is basic knowledge of the field I am trying to be hired for which is web developer or backend developer. The next important thing is obviously a portfolio. As I was creating my portfolio, I realized I never did a project by myself so this eventually made me me want start a mini shopping mall project. 

I started to plan out what kind of features and how site was going to be by benchmarking other shopping mall sites and as I was planning out the database structure of the site I was going to create, I realized I did not know a lot of things that was required to create a functional and proper database. 

And the obvious place to go to is youtube. Found a course by Caleb Curry, teaching from the basics and up to joins. The course does not talk about specific sql commands but rather on how to design a functional database which is exactly what I needed. 

I had the basic knowledge of database structure design because I had done projects before. But figured I would tie up some loose ends and the course was the perfect fit. Here are thigns I learned which I thought was pretty useful :

 

1. definition of a surrogate key and natural key and there differences.

previously when designing a database, I was taught to add an id for every table I created but was not taught the reason for doing such a procedure. I was setting up a surrogate key. surrogate keys are unique identified keys like natural key but does not have real value like a natural key. natural key is a unqiue identified key that already exists in the table like a username. 

 

2. normal forms

I studied the concept of normal forms when I was preparing for the korea engineer exam but did not know specifically how to apply to a table. 1nf assigns an atomic value for each attributes. 2nf removes all partial relations. 3nf make sure non keys are dependent to other non keys

 

3. joins

inner joins, left joins, right joins, outer joins and very new to me a self join

 

I want to keep track of what I have studied like this from now on. If the course is in Korean, I will post it in korean with english comments and if and probably mostly is in english then i will post it in english 

 

 

'ETC' 카테고리의 다른 글

Controller  (1) 2019.11.14
Service interface + ServiceImpl class  (0) 2019.11.14
Paging  (0) 2019.11.14
Mapper interface + Mapper xml  (0) 2019.11.14
게시판 DTO  (3) 2019.11.14

이틀 동안 일이 있어서 공부를 많이 못했는데 다시 시작하자 

 

1. 10진수를 2~16진수 변환

와일문안에서 실행되는 조건이 이 알고리즘의 핵심이다

10~15는 16진수에만 해당이되면서 A~E는 ASCII code각 1차이여서 저렇게 구현을 해봤다

만약 21번째 줄에서 '0'을 추가를 안하면 출력이 제대로 안된다..

 

2. 입력한 숫자만큼 더하기 빼기

boolean flag를 통해 + 와 -을 바꾸면서 출력하는데 여기서 배운점은 이푸문에 최대한 조건이 적을수록 시간이 적게 걸린다는 점이다. 첫번째는 유투브에서 보여준 코드는 0.027초가 걸렸지만 제가 작성한 것은 0.041 거의 70%시간이 더 필요했다 

 

 

3. 음계

8개의 숫자를 입력받는데 asc, desc 아니면 mixed라고 판단하는 알고리즘

 

 

4. 누적합 재귀호출

재귀 호출의 중요한 점 2가지는

끝나는 시점을 만들어주고, 어떤 값을 return할지을 정하는 것이다

12번째 줄에서 start +1를 해줘야 계속 값이 올라가고 올라가는 숫자의 멈추는 시점을 만들어주면 재귀 호출에 대한 이해는 끝난다

 

 

5. 팩토리얼 재귀

위에와 동일하게 리턴은 파라미터인 i -1를 해줘야 값이 내려가고, 1일때 1일 return하면 끝

'알고리즘' 카테고리의 다른 글

코딩테스트 (11/21/19)  (0) 2019.11.21
기초 알고리즘6(November 20 2019)  (0) 2019.11.20
기초 알고리즘4(November 1 2019)  (0) 2019.11.03
기초 알고리즘3(October 31 2019)  (0) 2019.11.01
기초 알고리즘3(October 30 2019)  (0) 2019.10.31

금요일에 공부를한 걸 정리를 못해서 친구 만나기 전에 지금 정리 할 시간이 생겨서 카페와서 정리를 할려고 하는데.. 2틀전에 해서 그런지 정리하는데 시간이 조금 걸렸네요

 

1. 상수 거꾸로 읽기

 

이 알고리즘을 풀때 저는 전에 했던 방식 처럼 먼저 스트링으로 입력 받았습니다 

1. 먼저 상수를 스트링으로 입력 받습니다

2. 목적은 입력 받은 두 상수를 거꾸로 수선을 바꾼뒤 더 큰 숫자를 출력하는게 알고리즘의 목적입니다. 

3. 단순히 뒤에서부터 하나씩 스트링에 추가하는 것 보단 효율성을 고려해서 스트링을 캐릭터 배열로 변환하고 18 ~22번째 처럼 첫번째 배열을 마지막 배열으랑 바꾸는 포문을 사용을 했습니다.

4. 그리고 자바 String엔 char 배열을 바로 바꿔주는 라이브러리가 있어서 사용후 숫자로 형변환을 하고 비교하면 알고리즘이 끝이납니다.

 

두번째 방식은 

1. 숫자를 입력받으면 int 배열에 % 10을 통해 나머지를  배열을 저장합니다(자연스럽게 뒷자리부터)

2. 입력받은 값에 /10하고 값을 재정의 해줍니다.

3. 만약 값을 123입력 받으면 현재 배열안에 3, 2, 1 순서대로 입력이 되있습니다. 이걸 321로 바꿀려면 일자리는 *1, 십자리는 *10 그리고 당연히 백자리는 * 100을 하면됩니다. 그래서 포문에서 30~33까지 구현을 했습니다.

4. 그리고 2개의 수를 비교해서 큰 수를 출력합니다

 

 

2. 달팽이

개인적으로 지금까지 알고리즘을 공부하면서 이 알고리즘에 대해서 고민을 제일 많이 했던것 같다. 분명히 정처기할때는 단순했는데 알고리즘을 직접 코딩을 하니까 멘붕이 왔다..

아직 다 이해는 못해서 다른분들이 올리신 알고리즘을 보면서 더 추가 할게요

1. 배열 크기를 선언해주기

2. 달패이 알고리즘은 처음엔 5개의 숫자가 1행에 입력이되고, 그 다음엔 4 개, 4개, 그리고 3개 3개, 2개 2개, 1개 1개 하고 끝이난다. 

3. 유투브에선 switch case문을 사용했는데 4가지의 포문이 있단, 오른쪽 , 아래, 왼쪽 그리고 위로 가는 방향. 그 이유 때문에 switch case에선 4개의 경우가 존재한다

4. 숫자를 저장하고 배열 출력하기

 

 

 

 

말은 기초이지만 확실히 실력이 없으니까 조금 헛고생 좀 했는데 그래도 생각한 만큼 새로운 것도 배우고 풀어나가니까 재밌네요 

시작

 

1. palindrome

02320 이렇게 첫 번째 숫자와 마지막 숫자 그리고 2번째 4번째 숫자가 똑같으면 palindrome여서 값은 true를 출력를 하는 알고리즘이다. 

10번째 줄부터 16번째는 제가 처음에 짝 코드인데 if else문을 사용해서 값이 정상적으로 나오는 것 같지만 문제는 만약 처음 돌 때는 false이지만 만약 마지막에만 값이 똑같으면 true로 변환하는데.. 그렇게까지 생각을 못 해서 20~28번 코드가 알고리즘에 적합한 코드이다. 한 번이라도 안 똑같으면 false로 값이 변하는 방식. 

또 charAt은 배열방처럼 0부터 시작을 한다!

 

 

2. 문자열 뒤집기

 

9~11번이 제 코드인데 값이 똑같이 출력이 됩니다. 근데 효율상 20~24가 더 빠르게 출력될 것 같네요.

1. 포문에서 str의 끝자리부터 backwards에 하나씩 추가해줍니다

2. 17번에서는 다른 방식으로 str를 charArray로 저장을 해줍니다. 

3. 포문 안에서는 c char의 길이의 반까지 돌리고, 첫 번째 마지막 바꾸고, 두 번째 그리고 마지막 - i 바꿔줍니다

4. 맨 마지막에 출력할 때 다시 String으로 변환

 

 

3. 중복된 수 제거하고 출력

1. 21~23은 arr[]의 inArr[i] 면 true로 변환해주기

2. 24~26은 잘 됐는지 빨간 글로 출력

3. 마지막 포문에서 이프문을 통해 arr[j]이 트루이면 숫자 출력하기

 

 

4. 평균을 구하고 평균넘는 학생 비율 구하기

1. 학생 수를 studentNum에 입력받고 studentGrade[] 배열 크기로 선언해주기

2. 학생 수만큼 점수 입력받기

3. 16~19포문에서 입력받으면서 sum에 총점 저장하기

4. avg에서 평균 받고 cnt를 통해 점수가 avg보다 높으면 cnt ++

5. cnt를 출력해주면서 비율 계산은 cnt/studentNum해주는데 둘 다 int형이여서 하나를 무조건 double형으로 형변환해주고 * 100하면 끝

 

 

6. 더하기 싸이클(1시간 이상 걸렸습니다..)

 

26을 입력 받았다고 가정을 하겠습니다

26시작해서 2 + 6 = 8 --> 68  6 + 8 = 14 -->  84 8 + 4 = 12 --> 42 4 + 2 = 6 --> 26 끝 4회전을 실시해서 출력은 4

 

1. 26의 일자리를 a에 number % 10 해서 저장(number에 입력받은 수를 저장합니다)

2. 26의 십자리를 b에 number/10를 해서 저장(int 형이여서 2.6의 .6은 버림)

3. result값을 0를 주고 while문을 실행하는데 조건은 result가 number랑 같을 때까지 실해

4. c에 a + b를 저장합니다. 처음엔 8

5.  result에 68이 나오기 위해서 a * 10 + c를 해주면 만약 c가 두 자릿수가 돼버리면 값이 이상하게 나옵니다. 그래서 저는 if문을 사용했는데 오늘 또 배운게 8 % 10을 하면 저는 0이 나올 줄 알았는데 당연히 8이 나옵니다. 왜냐면 10이 8로 나눌 수 없고 나머지는 자연스럽게 8이 되니까요. ㅎㅎㅎ 그래서 % 10을 추가하면 이프문을 사용 안해도 됩니다.

6. a 와 b값을 다시 지정해주고 cnt++올려주고 cnt출력 

 

지금 보면 다 간단한 알고리즘인데 기초가 없으니 하나 푸는데 시간도 오래 걸리고.. 그래도 매일 새로운 걸 배우니까 조금씩 성장하는거 같네요. 내일 약속 있어서 아침에 최대한 해보겠습니다 

갈수록 알고리즘에 대한 흥미가 더더욱 해지 는 것 같다. 

학원에서 프로젝트를 진행할 때 sts4버전를 다운로드해서 사용을 했는데 유난히 나한테만 프레임이 sts3또는 이클리습보다 무거웠던 점이 기억이 난다. 그래도 프로젝트 중간에 바꾸기 싫어서 2초 로딩 시간을 감안하면서 개발을 했는데 수료 후 취직 준비하면서 공부할 때 다시 eclipse로! 그래서 기존에 사용했던 dark theme이 없었는데 오늘 다시 다운을 받았다. 확실히 dark theme이 변수 클래스 칼러가 명백히 다르고 조끔 있어(?) 보이기도 하건 같다. 

 

 

1. 입력된 숫자 개수 출력 

1. 숫자를 입력받아 0~9까지 숫자의 개수를 출력하는 알고리즘

2. 내가 처음 코딩했을 때는(주석 부분) 이상하게 첫 번째 결과가 나왔는데 보니까 기존에 arr가 생성될 때 값이 없으면 0으로 초깃값이 있어서 값이 없으면 0의 개수가 올라갔다

3. 29번의 while문 처럼 n % 10의 나머지 수를 ++해주기

 

 

2. 구구단

1.구구단 같은 경우에는 너무 많이 했던 예시라서 비교적으로 쉬웠으며, printf의 사용법을 조금 더 구체적으로 알 수 있었던 계기

2.  * =를 표시하고 싶으면 %앞에 추가하고, 3가지의 값을 출력하니 ,로 구분짖기

 

3. 별모양

1. 핵심은 두 번째 포문에서 별을 언제까지 출력해야 하는지의 여부를 결정해주는 2번째 조건을 써주는거

2. 행이 증가하면 별의 숫자도 하나씩 증가, 즉 j를 i 보다 작거나 같을 때까지 *를 찍어주는기

 

 

4.별모양2

1. 별이 없는 칸도 같이 출력을 해야 되는 알고리즘

2. 배열을 사용하는 것이 아니라서 두 개 포문의 조건은 똑같이 지정해준다

3. 행이 내려갈 수 록 빈칸이 하나씩 추가되니 조건을 j < i

 

 

5. 별모양3

1. 별 모양 2랑 똑같은 방식, 이프문 조건만 다를 뿐

2. 주석으로 처리된 조건도 똑같은 역할을 하지만 i < number - (j +1) 조건이 더 정리가 잘 되는 것 같아서 사용했습니다

 

 

6. 제곱

1. 숫자 2개를 입력, 첫 번째는 숫자 두 번째는 제곱

2. for문를 1로 시작해야 하고 result를 n으로 계속 곱하기

 

 

7.  3 6 9 게임

1. 3 6 9가 나오면 짝한번, 두번 나오면 짝짝 두번 하는 알고리즘

2. 입력받은 수는 몇 번째까지 실해하는지 

3. cnt값은 스태틱 메소드 getNum에서 결정

4. getNum 파라미터의 값의 나머지가 3 6 9 이면 리턴하는 값을 +1, while문은 0되기까지 계속

5. cnt값이 만약 0이면 그냥 숫자 출력, 아니면 cnt의 계수만큼 짝 출력! 

 

지금 보면 엄청 간단한 알고리즘인데 getNum메소드를 잘 못 구현해서 무한루프 때문에 삼십분정도 헛고생 했네요.. 

근데 해결하면 느끼는 성취감이 개발자의 큰 매력인 것 같아요. 금요일까지 기초 끝내고 빨리 백준으로 넘어가야지 

지금은 취업 준비하면서 하루에 알고리즘과 자바 공부를 병행하고 있는데 확실히 생각하면서 문제를 푸는 알고리즘 쪽이 더 재미가 있는 것 같다. 

오늘은 9가지의 간단한 알고리즘을 정리해 보았습니다

 

1. 대문자에서 소문자, 소문자에서 대문자

1. 입력을 받은 후 arr[]에 저장

2. ASCII는 소문자가 먼저 나오고 그 다음에 대문자가 와서 소문자에서 대문자로 갈때는 차이를 기존값에 대해주고, 

대문자에서 소문자는 빼주면된다

 

 

2. 자기자신(?) 숫자 더하기

1. 숫자를 입력받고 

2. 10을 나눈 나머지를 result에 더하기

3. number를 재정의하고 number가 0보다 작을때 까지 반복

 

 

3. factorial

1. 첫번째 포문은 1 서부터 입력받은 숫자까지 올라가면서 곱하는 방법

2. 두번째 포문은 입력받은 숫자부터 1까지 내려가면서 곱하기

 

 

4. Greatest common divisor 최대공약수

1. 작은수까지 실행을 하기 위해서 작은수와 큰수를 저장하는 if문

2. gcd를 1부터 시작해서 big이랑 small에 나머지가 둘다 0일때 if를 gcd에 저장

 

 

5. 소수 찾기

1. 숫자를 먼저 17이라고 가정을 하고 시작

2. 소수인지 확인 하는 boolean변수를 통해 만약 숫자가 나눴을때 나머지 값이 없으면 다른 숫자로 나눌수 있다는 뜻, 즉 소수가 아니란 뜻을 표시하기위해 check를 false로 변환

3. check가 true 면 prime, check가 false면 소수 아님

4. 포문에서 소수를 찾을때 자신의 반까지만 반복해도 됨, 작은 숫자라 상관은 없지만 효율성을 고려한 부분

 

 

6. 숫자사각형 1

1. 원하는 숫자를 입력해서 4를 입력하면 4 x 4, 5는 5 x 5..

2. 각 자리에 1 부터 증가하기

3. 2중 포문 사용을 했으며 행이 고정

 

 

7. 숫자사각형 2(ㄹ자 형식으로 출력하는 방법)

1. 여기서는 배열을 사용안하고 출력하는 방법

2. 첫번째줄은 i가 짝수이고, 두번째줄은 i가 홀수, 이런 패턴을 이용해 if문을 사용했습니다

3. if문에서 짝수는 선증가를 했고(printNum이 0으로 시작해서) 그리고 홀수는 후증감를 했습니다

4. 2번째 포문을 끝내면 무조건 inputNumber를 한번 더해줘서 다시 돌기

 

혼자 구현했는데 역시 배열이 편하네요 

1. 배열의 방의 크기를 입력받은 값으로 지정

2. 짝수랑 홀수의 줄의 따라 저장하는 값을 다르게 저장

3. 마지막 포문을 통해 출력

첫번째 부분이 배열없이 \t를 이용해서 출력한 부분이고 오늘 배워서 활용한 printf를 %4d 간견, 4개의 문자 간격을 서로 지정해서 출력해봤습니다. 

 

 

8. 숫자사각형 3

1. 열고정 방식으로 출력하기

2. 단순히 숫자를 저장할때 행과 열의 지정 변수를 바꿔주고 값을 저장하면 끝

 

 

9. 숫자사각형 4

1. 다른 숫자사각형이랑 똑같은데 단순히 저장값이 달라짐

2. 방은 0부터 시작해서 각 변수에 +1를 해주고 곱하는 값을 저장

 

 

이렇게 알고리즘을 시작하지 이틀째인데 확실히 오후에 풀고 집에 와서 정리를 한번 더 하니까 머리에 잘 남기도 하고 스스로 정리를 할 기회인 것 같네요. 

맞춤법도 고치면서 발전할게요 ㅎㅎ

오늘부터 알고리즘 공부한걸을 포스팅할 생각입니다. 블로깅을 시작한 이유는 간단해요. 내가 공부한 내용을 남길수 있고 또 한국말이 어설픈나에게 조금 부그러운 일이지만 틀리면서 발전할 하고 싶어서 시작합니다. 

 

블로그를 wordpress란 사이트를 이용할려 했으나 돈을 지불하지 않으면 제한 사항이 많아서 티스토리를 통해서 시작을 했어요. (칼러스크립이 다운되서 이미지로 올릴게요)

 

1. 학생검색

1. 학생의 이름과 학번을 저장하기

2. y를 입력 받으면 학생이름을 통해 검색하기 n를 입력하면 종료

3. boolean flag를 사용해서 검색결과가 없다고 보여주기

4. 만약 y 또는 n말고 다른걸을 입력 했을때는 다시 입력 유도하기 

 

 

2. 피보나치

1. An = An-1 + An-2

2. 배열로 피보나치 출력하기 

3. 배열 사용없이 스위치 방식으로 출력하기

 

 

3.최빈수 구하기

1. 10개의 숫자를 입력받는다

2. 이 알고리즘의 핵심인 numCount란 배열에 inputNum[i]를통해 해당숫자 값을 올리는 것이다

3. 카운트가 제일 높은 숫자를 출력하기

 

 

4. 10진수를 2진수로

1. 19로 시작하고

2. 나머지를 bin[] 배열에 저장하기

3. mok에 /2한 숫자를 저장하고 값이 0 보다 작을때까지 저장

4. i--는 후증가를 했기때문에 빼준다

 

 

+ Recent posts