algorithm

(230518) 알고리즘 - 괄호풀기 / DB

hjkeeeem 2024. 7. 25. 20:28

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

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

task Table로 보여지는 task 등록화면

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 체크 해야함

course Table로 보여지는 화면, 오늘이 몇주차 몇일차인지 계산하는 기능

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. 

  1. Course,user =1:N관계
    Users(사용자) 는 Course(기수)에 속할 수 있습니다. -> 하나의 기수에 여러명의 사용자가 속할 수 있습니다.
  2. Course,Task=1:N관계
    Task(과제)는 Course에 속할 수 있습니다. -> 하나의 기수에 여러개의 과제가 있을 수 있습니다.
  3.  Board, Task = 1: N 관계
    하나의 Task(과제)에 대한 Board(질문)이 여러개 있을 수 있습니다.
  4. 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로 뜨는 것을 볼 수 있다.