728x90

신장 트리 : 그래프에서 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프

 

 

크루스칼 알고리즘 : 대표적인 최소 신장 트리 알고리즘

 

1. 간선 데이터를 비용에 따라 오름차순으로 정렬한다.

 

2. 간선을 하나씩 확인하며 현재의 간선이 사이클을 발생시키는지 확인한다.

    (1) 사이클이 발생하지 않으면 -> 최소 신장 트리에 포함한다.

    (2) 사이클이 발생하면 -> 최소 신장 트리에 포함하지 않는다.

 

3. 모든 간선에 대하여 2 의 과정을 반복한다.

 

 

 

필요함 함수 : find 연산, union 연산

 

 

 

 

728x90
728x90

우선 기본 Entity 두 가지를 생성해주었다. 스터디 룸 설명 부분에는 @Lob 어노테이션을 이용해서 긴 텍스트를 받을 수 있도록 해주었다.

 

room 엔티티에는 기존에 없던 roomName 을 추가해서 중복되는 스터디 룸인지 체크할 수 있도록 해주었다. 

 

@Entity
public class reservation {

    // 예약일 기본 키
    @Id @GeneratedValue
    Long possibleDtid;

    // 예약 가능 일자
    Date possibleRoomDt;

    Long roomId;



}
@Entity
public class room {

    @Id @GeneratedValue
    Long roomId;

    // 스터디 룸 이름
    String roomName;

    // 수용 가능 인원
    Long roomPerson;

    // 스터디 룸 가격
    Long roomPrice;

    // 스터티 룸 설명
    @Lob
    String information;


    public room(String roomName, Long roomPerson, Long roomPrice, String roomInformation) {
        this.roomName = roomName;
        this.roomPerson = roomPerson;
        this.roomPrice = roomPrice;
        this.information = roomInformation;
    }

    public room() {

    }
}

 

 

 

roomDto 를 통해 새로운 스터디 룸의 저장을 가능하게 해주었다. Controller 에서 create_room 에 접근이 안되는 오류가 발생했었는데, 메서드 public 으로 해주지 않아서 발생한 문제였다.

 

@RequiredArgsConstructor
public class roomDto {

    final roomRepository roomRepository;

    String roomName;

    Long roomPerson;

    Long roomPrice;

    String roomInformation;



    // 새로운 스터디 룸 저장
    @Transactional
    public void create_room(String roomName, Long roomPerson, Long roomPrice, String roomInformation){


        this.roomName = roomName;
        this.roomPerson = roomPerson;
        this.roomPrice = roomPrice;
        this.roomInformation = roomInformation;

        room new_room = new room(roomName,roomPerson,roomPrice,roomInformation);
        roomRepository.save(new_room);

    }
}

 

 

스터디 룸 추가 기능을 구현했다. 스터디 룸의 이름으로 중복 체크를 해주었고, 중복 이라면 alert 을 띄워 중복임을 알리도록 하였다. 중복이 아니라면 위의 DTO 를 이용해서 저장을 해주었다. 

 

// 스터디룸 추가

@GetMapping("/admin/add")
public String AddRoom(){
    return "admin/add";
}


@PostMapping("/admin/add")
public String AddRoom(@RequestParam("add_name") String add_name,@RequestParam("add_person") Long add_person,
                      @RequestParam("add_price") Long add_price, @RequestParam("add_information") String add_information,Model model ){

    // 룸 정상 추가 성공 시

    if(roomRepository.findByroomName(add_name).isEmpty()){


        System.out.println("성공 시");


        roomDto roomDto = new roomDto(roomRepository);
        roomDto.create_room(add_name,add_person,add_price,add_information);

        return "redirect:/admin";
    }

    // 이미 존재하는 룸이면

    else{

        model.addAttribute("add_fail","이미 존재하는 스터디 룸 입니다.");

        return "admin/add_fail";

    }

}

 

 

테스트 코드도 짜주었다. 입력 값을 bindingResult 로 제어하는 부분도 개발해야 겠다. 

 


@SpringBootTest
class roomCreateTest {

    @Autowired roomRepository roomRepository;


    // 스터디 룸이 정상적으로 저장되는 경우

    @Test
    void 룸_생성_성공() {

        // given
        roomDto roomDto = new roomDto(roomRepository);
        String roomName = "test123";
        roomDto.create_room(roomName,10L,15000L,"test room 입니다");

        // when
        List test = roomRepository.findByroomName(roomName);

        // then
        Assertions.assertThat(test.isEmpty()==false);
    }


    // 스터디 룸이 중복인 경우

    @Test
    void 룸_생성_실패() {

        // given
        roomDto roomDto = new roomDto(roomRepository);
        String roomName = "test123";
        roomDto.create_room(roomName,10L,15000L,"test room 입니다");

        // when


        roomDto roomDto1 = new roomDto(roomRepository);
        roomDto.create_room(roomName,9L,1500L,"test room2 입니다");

        // then
        int room_count = roomRepository.findByroomName(roomName).size();
        Assertions.assertThat(room_count == 1);

    }
}

 

728x90
728x90

회의록 노션 링크 : https://www.notion.so/2-390a506f20f24335a6ef37078aac08af

 

2조 회의록

2023.05.04

www.notion.so

 

공용 깃허브 주소 : https://github.com/Hanaro-FirstAssignment-Team2 

 

 

 

팀원 : 4명

목표 : 웹 페이지 만들기 ( 인당 2페이지 이상 )

주제 : 기존 증권 사이트를 가독성 있는 증권 사이트로 재구성하기

728x90
728x90

자산 = 자본 + 부채
금융회사 : 예금 받아서 대출해주기

딜러 : 자기매매, 자기 자본 필요
브로커 : 중개인, 자기 자본 불필요

금산분리 : 금융자본과 산업자본의 분리
제한 지분율 : 4%
카뱅, 토스 등은 이 원칙 X -> 역차별 가능성

핀테크 -> IT 의 입김이 더 세다. 대기업이 자본으로 금방 따라갈 수 있다.

기존 금융권 -> SI 발주 및 개발업체 선정으로 했지만 최근에는 직접 개발에 참여하는 추세이다. 애자일 방법을 도입하려고 한다.


수익률 : 수익/원금
기대수익률 : 기대수익/원금
제시수익률 : 기대수익률의 예시
요구수익률=할인률=시장금리=금리+위험대가 : 매수자가 원하는 미래의 수익률

균형점 : 기대수익률 = 요구수익률

채권 가격은 금리와 반비례 관계이다.

분포가 지수함수, 멱급수 관계에 있으면 로그 변환을 이용한다.

 

상관관계는 인과관계가 아니다!

728x90

'🟢 디지털 하나路 > Architecture' 카테고리의 다른 글

HTML 기초  (0) 2023.05.11
하나은행 특강  (0) 2023.05.02
728x90

회의록 : https://www.notion.so/e1d249e602994b7b956f1f38fce1f4c1?v=febd2b2b8361452489b07ff2edf15a1c&p=3f6bd32d3e0340c7b1904e231655c505&pm=s

 

내 역할 : 관리자 페이지 생성 

 

- 스터디 룸 별 설명 추가

- 스터디 룸 별 예약 가능 일자 추가

 

 

728x90
728x90

개발자 : 로그 생성
데이터 공학자 : 로그 수집, 데이터 추출
데이터 분석가 : 데이터 시각화, 집계
데이터 과학자 : 빅데이터, AI 구축

보험 회사의 수익 구조 : 고객이 지불하는 금액을 투자를 통해 이득을 본다. 은행에서의 예금 금액 관리와 비슷하다. 

추출한 데이터와 도메인 지식과 비교하는 것이 중요하다. 둘의 결과가 다르다면 재검토가 필요하다.

 

공개채용 : 전반적인 금융 업무가 적합할지

ex) 본인 장단점 : 친구 300명에게 물어봤다. 

프로젝트에서 본인 역할 + 해결방안에 대한 구체적 기술해야 함.

면접 : 질문의 의도 파악하기 
          향후 커리어에 대한 계획 : naver.corp + 카카오 채용에서 선호되는 스택 확인

네이버,카카오 -> 토스,배민 -> 통신사 -> 금융권

728x90

'🟢 디지털 하나路 > Architecture' 카테고리의 다른 글

HTML 기초  (0) 2023.05.11
금융 서비스의 이해  (0) 2023.05.04
728x90

빠진 조건 없게 구현을 했고, 테스트 케이스는 통과를 했지만 실제 채점에서는 시간 초과가 나왔다. BFS 가 아닌 모든 도형 모양에 따른 최댓값으로 구해도 정답이 나온다고 한다. 

import sys
from collections import deque
import copy
 
def bfs(x1,y1,k,a,b):
 
    answer = 0
 
    count = 0
 
    queue = deque()
 
    queue.append([x1,y1])
 
    answer += k[x1][y1]
 
    dx = [0,0,1,-1]
    dy = [1,-1,0,0]
 
    while queue:
 
        x,y = queue.popleft()
 
        k[x][y]=0
 
        if count == 3:            
            return answer
 
        max_x = 0
        max_y = 0
        max_answer = 0
 
        for i in range(4):            
 
            temp_x = x + dx[i]
            temp_y = y + dy[i]
 
            if 0<=temp_x<a and 0<=temp_y<b and k[temp_x][temp_y]>max_answer:
                max_x = temp_x
                max_y = temp_y
                max_answer = k[temp_x][temp_y]                                
 
 
        queue.append([max_x,max_y])
 
 
        answer += k[max_x][max_y]
        count+=1
 
 
 
a,b = list(map(int,sys.stdin.readline().split(" ")))
 
k = [ ]
 
 
for i in range(0,a):
    k.append(list(map(int,sys.stdin.readline().split(" "))))
 
 
 
 
answer = [ ]
 
 
for i in range(0,a):
    for j in range(0,b):
 
 
        k1 = copy.deepcopy(k)
 
        answer.append(bfs(i,j,k1,a,b))
 
max_answer = max(answer)
 
for i in range(0,a):
    for j in range(0,b-3):
 
        sums = 0
 
        if i==0:
            if k[i][j]+k[i][j+1]+k[i][j+2]+k[i+1][j+1] > max_answer:
                max_answer = k[i][j]+k[i][j+1]+k[i][j+2]+k[i+1][j+1]               
 
 
        elif i==a-1:
 
            if k[i][j]+k[i][j+1]+k[i][j+2]+k[i-1][j+1] > max_answer:
                max_answer = k[i][j]+k[i][j+1]+k[i][j+2]+k[i-1][j+1]         
 
 
 
        else:
            if k[i][j]+k[i][j+1]+k[i][j+2]+k[i+1][j+1] > max_answer:
                max_answer = k[i][j]+k[i][j+1]+k[i][j+2]+k[i+1][j+1]
 
            if k[i][j]+k[i][j+1]+k[i][j+2]+k[i-1][j+1] > max_answer:
                max_answer = k[i][j]+k[i][j+1]+k[i][j+2]+k[i-1][j+1]
 
 
 
 
 
 
print(max_answer)
 
 
 
 
 
 

s

728x90
728x90

일반적인 BFS 로 접근했는데, 매번 max 값을 초기화 해주는 부분에서 막혔고, 찾아보니 set 을 사용한 bfs 를 해주어야 한다고 한다. 포인트는 queue 에 위치 값 뿐 아니라, 현재까지 지나온 알파벳 리스트를 넣어주는 것이다.

 

import sys
from collections import deque
 
 
 
 
a,b = list(map(int,sys.stdin.readline().split(" ")))
 
k = [ ]
 
 
for i in range(0,a):
    k.append(list(input()))
 
 
# bfs 돌리기
 
 
queue= set([(0,0,k[0][0])])
 
 
answer=1
 
 
while queue:
 
 
 
    x,y,z = queue.pop()
 
    answer = max(answer,len(z))
 
 
    dx = [0,0,1,-1]
    dy = [1,-1,0,0]
 
    for i in range(4):
        temp_x = x + dx[i]
        temp_y = y + dy[i]
 
 
        if 0<=temp_x<a and 0<=temp_y<b and k[temp_x][temp_y] not in z:
 
 
 
            queue.add((temp_x,temp_y,k[temp_x][temp_y]+z))
 
 
 
 
 
print(answer)
 
 
728x90

+ Recent posts