1. 알고리즘
1-1. 괄호풀기
1-1-1. 괄호 풀기 설명
()() – 짝이 맞음 true
(())() – 짝이 맞음 true
)()( – 짝이 안맞음 false
(()( – 짝이 안맞음 false
괄호가 맞는 경우라면 반드시 여는 괄호 다음에 닫는 괄호가 나온다.
1-1-2. 괄호 풀기 ( Stack 이용 x )
public class BracketWithoutStack {
public static void main(String[] args) {
String brackets = "((((()))))";
while(brackets.indexOf("()") != -1){
brackets = brackets.replace("()", "");
}
if(brackets.length() == 0){
System.out.println("올바른 괄호 입니다.");
}else {
System.out.println("올바른 괄호가 아닙니다.");
}
}
}
IndexOf는 특정문자열을 찾거나, 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며 , 만약 찾지 못했을 때 -1을 반환(return)한다.
.indexOf( "찾을 특정 문자" , "시작할 위치" ) 이런식으로 사용해 주면된다.
"시작할 위치" 같은경우는 생략이 가능하며 생략할 경우 0번째 즉 처음부터 찾기 시작한다.
2. DB
2-1. task 진행 상황 만들기
2-1-1. course-student-db 생성
2-1-2. user Table
CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) DEFAULT NULL,
`last_modified_at` datetime(6) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`real_name` varchar(255) DEFAULT NULL,
`role` varchar(255) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
`profile` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`),
);
2-1-3. task Table
CREATE TABLE `course-student-db`.`task` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(45) NULL,
`week` INT NULL,
`day_of_week` INT NULL,
`description` VARCHAR(45) NULL,
`task_status` VARCHAR(45) NULL,
`created_at` DATETIME(6) NULL,
`last_modified_at` DATETIME(6) NULL,
`deleted_at` DATETIME(6) NULL,
`course_id` INT NULL,
`user_id` INT NULL,
PRIMARY KEY (`id`));
2-1-4. course Table
+id 에 AI 체크 해야함
CREATE TABLE `course-student-db`.`course` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`course_status` VARCHAR(45) NULL,
`start_date` DATE NULL,
`end_date` DATE NULL,
`description` VARCHAR(45) NULL,
`user_id` INT NULL,
`created_at` DATETIME(6) NULL,
`updated_at` DATETIME(6) NULL,
`deleted_at` DATETIME(6) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE);
데이터 입력하기
2-2-1. user 등록
INSERT INTO `course-student-db`.users
(`created_at`,`last_modified_at`,`email`,`password`,`real_name`,`role`,`user_name`) VALUES
('2023-03-12 20:31:58.841752','2023-03-29
15:24:49.345051','abcd@aaaaa.com','1234','김미미','ROLE_STUDENT','mimi1123');
2-2-2. task 등록 2개
INSERT INTO `course-student-db`.task
(`created_at`,`last_modified_at`,`day_of_week`,`deleted_at`,`description`,`task_status`,`title`,`week`,
`course_id`,`user_id`) VALUES ('2023-04-02 00:14:51.586722','2023-04-02 00:14:51.586722',4,NULL,'description',
'IN_PROGRESS','user, task 테이블 만들기',5,1,1);
INSERT INTO `course-student-db`.task
(`created_at`,`last_modified_at`,`day_of_week`,`deleted_at`,`description`,`task_status`,`title`,`week`,
`course_id`,`user_id`) VALUES ('2023-04-02 00:14:51.586722','2023-04-02 00:14:51.586722',4,NULL,'description',
'IN_PROGRESS','CourseTable만들기',5,1,1);
2-2-3. users , task 각각 아래 명령어로 잘 들어갔는지 확인
select * from `course-student-db`.users;
select * from `course-student-db`.task;
2-3. join
course 테이블에 데이터 추가 > course_user 테이블 생성 (join된 결과를 확인할) > join
2-3-1. course Table 데이터 추가
SELECT * FROM `course-student-db`.course;
INSERT INTO `course-student-db`.course (`name`) VALUES ('멋사 백엔드 5기');
2-3-2. course_user 테이블 생성
CREATE TABLE `course-student-db`.`course_user` (
`id` INT NOT NULL AUTO_INCREMENT,
`course_id` VARCHAR(45) NOT NULL,
`user_id` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));
2-3-3. course_user Table 데이터 추가
INSERT INTO `course-student-db`.course_user (`course_id`,`user_id`) VALUES ('1','1');
INSERT INTO `course-student-db`.course_user (`course_id`,`user_id`) VALUES ('1','2');
2-3-4. Join 걸어서 Query 하기
select course.name, users.real_name
from users, course, course_user
where users.id = course_user.user_id
and course_user.course_id = course.id;
2-3-5. Join 걸어서 조건 주기
select course.id, course.name, users.real_name
from users, course, course_user
where users.id = course_user.user_id
and course_user.course_id = course.id
and course.id = 1;
2-4.
- Course,user =1:N관계
Users(사용자) 는 Course(기수)에 속할 수 있습니다. -> 하나의 기수에 여러명의 사용자가 속할 수 있습니다. - Course,Task=1:N관계
Task(과제)는 Course에 속할 수 있습니다. -> 하나의 기수에 여러개의 과제가 있을 수 있습니다. - Board, Task = 1: N 관계
하나의 Task(과제)에 대한 Board(질문)이 여러개 있을 수 있습니다. - Comment, Board = 1 : N 관계
하나의 Board(글)에 대해 Comment(댓글)이 여러개 있을 수 있습니다
2-4-1. user_task Table 생성
CREATE TABLE `course-student-db`.`user_task` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`task_id` INT NOT NULL,
`task_status` INT NOT NULL,
PRIMARY KEY (`id`));
2-4-2. user_task Table 데이터 입력
2-4-3. 데이터 수정 IN_FROGRESS -> DONE
2-4-4. 결과
INSERT INTO가 아닌 UPDATE로 뜨는 것을 볼 수 있다.
'algorithm' 카테고리의 다른 글
[Programmers] [코딩테스트 입문] 최댓값 만들기, 삼각형의 완성조건, 문자열 안에 문자열 (0) | 2024.09.03 |
---|---|
[Programmers] [코딩테스트 입문] 두 수의 나눗셈, 특정 문자 제거하기 (1) | 2024.09.03 |
(230619) Queue (0) | 2024.09.03 |
(230517) 알고리즘 - Stack(스택) / DB (0) | 2024.07.25 |
(230516) 알고리즘 - 삽입 정렬 (0) | 2024.07.25 |