알고리즘

1일 1알고리즘 실천

 

자율 프로젝트

이번 주부터 자율 프로젝트가 시작되었다. 나는 팀장 코치를 맡았고, 반 배정도 나오지 않아 반 미팅만 돌아다녔다.. ㅎㅎ

추가적인 업무는 대기하려고 한다.

 

CS 스터디

CORS와 URL/URI 관련하여 학습을 했다.

CORS는 프로젝트 진행 도중 많이 발생했던 에러라서 이해를 확실하게 해야겠다는 생각이 들었다.

그리고 URL/URI는 공부하던 도중 URL이 querystring까지 포함이 되는 개념인지에 대해 애매한 부분이 많아 추가적인 공부가 필요할 것 같다.

 

후기

CS는 여전히 어려워서 더 많은 공부가 필요하고, 웹 프로젝트를 안한지 너무 오래돼서 많은 것들을 까먹은 것 같아 프로젝트를 해보려고 한다.

프로젝트 하면서 복습도 하고, 새로 배워가는 개념들이 있었으면 좋겠다.

'잡담' 카테고리의 다른 글

4월 4주차 결산  (0) 2022.05.01
4월 3주차 결산  (0) 2022.04.24
4월 1주차 결산  (0) 2022.04.10
3월 5주차 결산  (0) 2022.04.04
3월 4주차 결산  (0) 2022.03.27

이 글은 의존성 주입과 db연결을 다루지 않으며, 오로지 Entity 구현 만을 다룹니다.

 

userId를 기본 키로 갖는 User Entity입니다.

나중에 작성할 UserTitle Entity와 1:N 관계를 나타내기 위해 @OneToMany 어노테이션을 사용하였습니다.

 

다음은 TitleId를 복합 키로 갖는 Title Entity입니다.

@IdClass로 구현하였으며, 관련 구현 방법은 [여기]에 있습니다.

사실 복합 키로 구현하지 말고, titleId를 기본 키로 두는게 좋지만 학습을 위해 titleName까지 묶어서 복합 키를 구현하였습니다.

 

이제 저는 User와 Title Entity의 N:N 관계를 UserTitle Entity로 구현할 생각이며, 각각 Entity의 key들을 외래 키이자 기본 키로 사용하려고 합니다.

우선 UserTitle Entity와 1:N 관계를 위해 @OneToMany 어노테이션을 추가합니다.

mappedBy를 확실히 지정해줍니다!

 

이것 또한 IdClass로 구현하기 위해 UserTitleId를 구현하였습니다.

IdClass의 변수로는 참조할 key를 적어주시면 되는데

User는 String인 userId

Title은 Entity 자체인 Title을 자료형으로 넣어줍니다.

변수 명은 아까 User와 Title에서 mappedBy로 작성해둔 이름으로 맞춰줍니다.

UserTitle 최종본입니다.

클래스 위에 @IdClass 어노테이션 달아주시고,

참조할 Entity를 자료형으로 가지는 변수를 생성해주시면 됩니다.

여기서 변수명은 mappedBy와 통일시켜야 합니다!

그리고 JoinColumn을 이용해 참조하는 필드 이름(referencedColumnName)과 데이터베이스에 표시될 이름(name)을 지정해줍니다.

 

이제 실행합니다!

로그를 보시면 테이블이 잘 생성되었고, Foreign Key도 설정이 잘 되었음을 확인할 수 있습니다.

그리고 이렇게 테이블이 잘 생성되었음을 알 수 있습니다!

 

다음에는 Embeddable으로 구현해서 포스팅해볼 생각입니다.

알고리즘

1일 1알고리즘 실천

 

특화 프로젝트

이번주로 특화 프로젝트가 마무리되었다.

교육생분들이 7주동안 준비한 것들을 발표 및 UCC로 마무리하였다.

 

CS 스터디

이번주는 SSL/TLS 부분을 맡아서 진행했다.

안그래도 배포 공부중이었는데 공부하면서 준비할 수 있었다.

근데 내용이 어려워서 추가적인 공부가 필요할 것 같다.

 

후기

벌써 다음주에 자율 프로젝트가 시작되고, 코치 업무도 얼마 남지 않았다.

이번에는 팀장 코치를 맡았고, 어떤 업무가 주어질 지는 지켜봐야 할 것 같다.

인수인계 잘 받아서 적응해야겠다.

그리고 cs 공부도 할게 너무 많은데 얼른 해야겠다.

'잡담' 카테고리의 다른 글

4월 3주차 결산  (0) 2022.04.24
4월 2주차 결산  (0) 2022.04.17
3월 5주차 결산  (0) 2022.04.04
3월 4주차 결산  (0) 2022.03.27
3월 3주차 결산  (0) 2022.03.20

알고리즘

1일 1알고리즘

 

특화 프로젝트

이번주 역시 개발에 집중된 한주였다.

진행 도중 DoS 공격이 감지되는 이상한 상황도 있었지만 다행히도 잘 마무리 된 것 같고,

해당 팀에게는 과도한 API 호출이나 비밀번호 같은 설정부분을 다시 확인해 달라고 했다.

처음 있는 일이라 너무 당황스러웠지만 그만큼 프로젝트에 신경을 많이 쓰고있기 때문이라고 생각하려고 한다.

 

CS 스터디

이번주부터 네트워크 과목으로 스터디를 진행했다.

네트워크 많이 어렵더라.. ㅋㅋㅋㅋㅋㅋ

공부좀 열심히 해야지~

 

후기

코치도 두 달밖에 남지 않았고, 내 취업 현황은.. 이번 상반기도 글러먹은듯 하다.

코테를 보면서 내 부족한 역량을 파악했고, CS 스터디를 통해 전반적으로 나아질 것을 기대하고 있지만 결국에는 내가 해야할 일이다.

몇 주째 미루면서 시도하고 있는 배포는 너무 안돼서 알고리즘을 몇 문제나 풀었는지 모르겠지만 얼른 해결했으면 좋겠다.. ㅠ

'잡담' 카테고리의 다른 글

4월 2주차 결산  (0) 2022.04.17
4월 1주차 결산  (0) 2022.04.10
3월 4주차 결산  (0) 2022.03.27
3월 3주차 결산  (0) 2022.03.20
3월 2주차 결산  (0) 2022.03.13

알고리즘

1일 1알고리즘 실천

 

특화 프로젝트

특화 프로젝트 시작한지 벌써 4주차다.

벌써 2주 남았고, 교육생분들은 개발과 배포에 전념 중이다.

저번 기획 평가때 눈에 띄는 팀들이 많아 결과물이 기대가 된다.

 

CS 스터디

이번주에 마지막 DB 시간이었고, 다음주에는 네트워크를 시작한다.

DB도 역시 모르는 내용들이 많아 추가적인 공부가 더 필요할 것이다.

네트워크는 제일 자신 없는 과목이라 열심히 준비해야겠다.

 

후기

시간 너무빠르다. 벌써 3월도 끝..

저번에 못 썼던 자소서도 어떻게든 마무리는 했고, 코테도 두 번정도 쳤다.

내 코테용 언어가 C++이라 문자열을 잘 안풀었는데 코테에 문자열이 많이 나와 이번주부터는 문자열 위주로 풀려고 한다.

코테 삽질도 많이하고 망했다고 생각해서 걱정은 되지만.. 면접 드가자 제발~

'잡담' 카테고리의 다른 글

4월 1주차 결산  (0) 2022.04.10
3월 5주차 결산  (0) 2022.04.04
3월 3주차 결산  (0) 2022.03.20
3월 2주차 결산  (0) 2022.03.13
3월 1주차 결산  (0) 2022.03.06

https://www.acmicpc.net/problem/14725

 

14725번: 개미굴

첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N개가 주어진다.  (1 ≤ N ≤ 1000) 두 번째 줄부터 N+1 번째 줄까지, 각 줄의 시작은 로봇 개미 한마리가 보내준 먹이

www.acmicpc.net

개미굴의 각 저장소들을 트라이 방식으로 저장할 수 있습니다.

A B C 이런식으로 입력이 들어오면 A 다음 B 다음 C 이런식으로 저장하는 방식입니다.

 

다만 들어오는 데이터가 문자열 방식이므로 일반적인 배열로는 할 수 없으며 map를 사용합니다.

m.find(str) 메소드를 이용하여 해당 depth에 문자열이 저장되었는지 확인 후

저장되었다면 다음 depth로 이동, 저장되지 않았다면 해당 depth의 map에 문자열을 저장 후 다음 depth로 이동합니다.

 

출력은 개미굴의 구조를 사전 순으로 출력합니다.

map은 이미 정렬이 된 자료구조이므로 iterator를 이용하여 사전 순으로 출력해줍니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <map>
#include <string>
#define MAX 16
using namespace std;
 
string list[MAX];
int N, M;
 
typedef struct Trie {
    map<string, Trie*> m;
 
    ~Trie() {
        map<string, Trie*>::iterator iter = m.begin();
        for (; iter != m.end(); iter++) {
            delete (*iter).second;
        }
    }
 
    void insert(int idx) {
        if (idx == M) return;
 
        if (m.find(list[idx]) == m.end()) {
            m.insert({ list[idx], new Trie() });
            m[list[idx]]->insert(idx + 1);
        }
        else {
            m[list[idx]]->insert(idx + 1);
        }
    }
 
    void find(int depth) {
        map<string, Trie*>::iterator iter = m.begin();
        for (; iter != m.end(); iter++) {
            for (int i = 0; i < depth; i++) {
                cout << "--";
            }
            cout << (*iter).first << '\n';
 
            (*iter).second->find(depth + 1);
        }
    }
}Trie;
 
Trie *t;
 
void func() {
    t->find(0);
}
 
void init() {
    t = new Trie();
}
 
void input() {
    init();
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> M;
        for (int j = 0; j < M; j++) {
            cin >> list[j];
        }
        t->insert(0);
    }
}
 
int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    input();
    func();
 
    return 0;
}
cs

'algorithm > Trie' 카테고리의 다른 글

boj 5052 전화번호 목록  (0) 2022.03.27

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

트라이를 연습하려고 풀었던 문제입니다.

 

트라이에 주어지는 전화번호들을 전부 넣은 다음, 넣었던 전화번호들을 트라이 안에서 검색합니다.

검색하던 도중 해당 전화번호까지 가기 전에 isEnd를 만나면 접두어가 있다는 뜻이므로 NO를 출력합니다.

모든 전화번호를 탐색하여 접두어를 만나지 못하면 YES를 출력합니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#define MAX 10001
using namespace std;
 
char list[MAX][11];
int N;
 
int charToInt(char x) {
    return x - '0';
}
 
typedef struct Trie {
    bool isEnd;
    Trie *next[10];
    Trie() : isEnd(false) {
        memset(next, 0sizeof(next));
    }
 
    ~Trie() {
        for (int i = 0; i < 10; i++) {
            if (next[i]) delete next[i];
        }
    }
 
    void insert(char *key) {
        if (*key == '\0') {
            isEnd = true;
        }
        else {
            int idx = charToInt(*key);
            if (!next[idx]) next[idx] = new Trie();
            next[idx]->insert(key + 1);
        }
    }
 
    bool find(char *key) {
        if (*key == '\0'return true;
        if (isEnd) return false;
 
        int idx = charToInt(*key);
        return next[idx]->find(key + 1);
    }
}Trie;
 
Trie *t;
 
void func() {
    for (int i = 0; i < N; i++) {
        if (!(t->find(list[i]))) {
            cout << "NO\n";
            return;
        }
    }
 
    cout << "YES\n";
}
 
void input() {
    t = new Trie();
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> list[i];
        t->insert(list[i]);
    }
}
 
void init() {
    delete t;
}
 
int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    int tc;
    cin >> tc;
    while (tc--) {
        input();
        func();
        init();
    }
 
    return 0;
}
cs

'algorithm > Trie' 카테고리의 다른 글

boj 14725 개미굴  (0) 2022.03.27

알고리즘

1일 1알고리즘 실천

 

특화 프로젝트

특화 프로젝트 3주차 진행하였다.

배포 위주의 질문이 들어왔지만 대답을 많이 하지 못했다.

배포 연습 해야지 라고 한지 몇주가 지났는데 아직 안돼서 ㅠ

다음주는 진짜 해야겠다.

 

CS 스터디

이번주는 데이터베이스에서 Join과 Index를 맡아서 진행했다.

생각보다 모르는 부분이 많았어서 좋은 시간이 되었다.

 

후기

배포 해야지만 몇주 한 것 같은데.. 아직 잡고있는 내 모습에 반성하면서 이번 달 안으로는 마무리할 수 있도록 해야겠다.

취업 준비도 해야하고.. 바쁘다.

'잡담' 카테고리의 다른 글

3월 5주차 결산  (0) 2022.04.04
3월 4주차 결산  (0) 2022.03.27
3월 2주차 결산  (0) 2022.03.13
3월 1주차 결산  (0) 2022.03.06
2월 4주차 결산  (0) 2022.02.27

알고리즘

1일 1알고리즘 실천

오랜만에 자바로 해봤는데 다까먹어서 못하겠더라 ㅋㅋ

 

특화 프로젝트

특화 프로젝트 2주차로 기획 설계 진행상황 피드백을 진행하였다.

어느정도 마무리된 팀도 있었고, 다음주면 개발에 들어갈 팀이 있을 것 같다.

 

CS 스터디

이번주도 데이터베이스였고, 분량이 짧아 여유로웠다.

그만큼 다음주 준비는 더 열심히 해야겠다.

 

후기

이제 슬슬 공채도 올라오고 있고, 코치 업무랑 병행해야 하기 때문에 바빠질 것 같다.

열심히 해야겠다~

'잡담' 카테고리의 다른 글

3월 4주차 결산  (0) 2022.03.27
3월 3주차 결산  (0) 2022.03.20
3월 1주차 결산  (0) 2022.03.06
2월 4주차 결산  (0) 2022.02.27
2월 3주차 결산  (0) 2022.02.20

https://www.acmicpc.net/problem/10986

 

10986번: 나머지 합

수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j)

www.acmicpc.net

[boj 3673 나눌 수 있는 부분 수열] 문제와 같은 풀이 방법입니다.

 

모든 수열의 누적합을 구해 각각의 누적 합의 %M 값을 사용합니다.

1
2
5 3
1 2 3 1 2
cs

위의 입력을 예시로 들면

1
2
sum   = 1 3 6 7 9
MOD M = 1 0 0 1 0
cs

이렇게 됩니다. 저는 이번 문제는 dp에 MOD M한 값을 미리 저장해두었고, cnt[dp[i]]으로 카운팅 하였습니다.

 

M = 3이므로

나머지가 0인 갯수는 3

나머지가 1인 갯수는 2이므로

 

나머지가 같은 부분 수열에서 2개를 뽑는 조합을 더하는 식으로 구할 수 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#define MAX_N 1000001
#define MAX_M 1001
using namespace std;
typedef long long ll;
 
ll cnt[MAX_M], ans;
int dp[MAX_N];
int N, M;
 
void func() {
    ans = cnt[0];
    for (int i = 0; i < M; i++) {
        ans += (cnt[i] * (cnt[i] - 1/ 2LL);
    }
 
    cout << ans << '\n';
}
 
void input() {
    cin >> N >> M;
    for (int i = 1; i <= N; i++) {
        cin >> dp[i];
 
        dp[i] = (dp[i] + dp[i - 1]) % M;
        cnt[dp[i]]++;
    }
}
 
int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    input();
    func();
 
    return 0;
}
cs

'algorithm > dp' 카테고리의 다른 글

boj 21923 곡예 비행  (0) 2022.06.10
boj 12978 스크루지 민호 2  (0) 2022.06.08
boj 14238 출근 기록  (0) 2022.02.04
boj 3673 나눌 수 있는 부분 수열  (0) 2022.01.31
boj 20500 Ezreal 여눈부터 가네 ㅈㅈ  (0) 2022.01.01

알고리즘

1일 1알고리즘 실천

 

특화 프로젝트

이번주가 1주차로 특화 프로젝트를 시작했고, 모든 팀의 기획 진행상황 확인과 피드백을 진행했다.

전반적으로 주제가 잘 나온 것 같고, 다음주에도 기획 진행될 예정이다.

 

CS 스터디

이번주부터 데이터베이스 파트를 나눠서 학습 후 스터디를 진행하였다.

운영체제는 저번주에 마무리 되었기 때문에 여태 한 것들 정리해서 공부할 필요가 있어보인다.

 

후기

이제 특화 프로젝트를 시작했기 때문에 도메인 학습이 덜 된 부분들을 추가로 할 필요가 있을 것 같고,

이제 공채 올라올 때라서 취업준비도 병행해야 할 것 같다.

계속 바빠지지 않을까 생각이 든다.

'잡담' 카테고리의 다른 글

3월 3주차 결산  (0) 2022.03.20
3월 2주차 결산  (0) 2022.03.13
2월 4주차 결산  (0) 2022.02.27
2월 3주차 결산  (0) 2022.02.20
2월 2주차 결산  (0) 2022.02.14

알고리즘

1일 1알고리즘 실천

 

특화 프로젝트

이번주부터 특화 프로젝트를 시작했다.

아직 부트캠프 기간이라 명세서 학습에 집중했다.

나는 특화 프로젝트를 안했기 때문에 더 열심히 해야할 것 같다.

 

CS 스터디

어떠한 이슈들로 인해 오랜만에 스터디를 한 것 같다.

오늘로 운영체제를 마무리했고, 다음주부터 데이터베이스를 진행할 예정이다.

그런데 이렇게 하는게 다가 아니고 결국은 내가 공부해야 할 문제다.

 

후기

이번주는 많은 일들이 있었던 것 같다.

프로젝트 사전학습을 해야 했지만 코로나도 걸리고.. 여러 이슈상황이 있었어서 컨디션이 안올라왔다.

물론 핑계겠지만 회복도 어느정도 끝났으니 다시 열심히 해야지

배포도 해야하고.. 할게 너무 많다.

'잡담' 카테고리의 다른 글

3월 2주차 결산  (0) 2022.03.13
3월 1주차 결산  (0) 2022.03.06
2월 3주차 결산  (0) 2022.02.20
2월 2주차 결산  (0) 2022.02.14
2월 1주차 결산  (0) 2022.02.06

+ Recent posts