[프로그래머스] 오픈채팅방 - 42888(Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/42888문제 설명주어진 문제는 오픈 채팅방에서 사용자의 행동을 기록한 로그를 바탕으로, 최종적으로 출력할 메시지를 생성하는 것입니다. 다양한 사용자의 닉네임 변경 이력과 입퇴장 기록을 처리해야 하며, 효율적으로 닉네임 정보를 관리해야 합니다.나의 풀이풀이 과정닉네임 관리:HashMap을 사용하여 사용자의 고유 ID에 대한 최신 닉네임을 저장합니다.명령이 "Enter" 또는 "Change"일 경우, 닉네임 정보를 업데이트합니다.최종 메시지 생성:명령이 "Enter"인 경우, "님이 들어왔습니다." 메시지를 추가합니다.명령이 "Leave"인 경우, "님이 나갔습니다." 메시지를 추가합니다.이 ..
[CS] MVC와 MVVM 모델
·
Back end
소프트웨어 개발에서 아키텍처 패턴은 코드의 유지보수성과 확장성을 높이기 위해 사용됩니다. 그중 MVC와 MVVM 모델은 가장 널리 사용되는 두 가지 패턴으로, 각각의 구조와 장단점이 있습니다.1. MVC (Model-View-Controller)구조Model :데이터와 비즈니스 로직을 관리합니다. 데이터베이스와의 상호작용, 상태 관리 등이 포함됩니다.View :사용자 인터페이스(UI)를 담당합니다. 데이터를 화면에 출력하고 사용자 입력을 처리합니다.Controller :View와 Model 간의 중개 역할을 합니다. 사용자의 요청을 받아 Model을 통해 데이터를 처리하고, 결과를 View에 전달합니다.작동 방식사용자가 View를 통해 입력합니다.View가 Controller에 요청을 전달합니다.Cont..
[프로그래머스] 할인 행사 - 131127(Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/131127문제 설명고객이 원하는 상품과 수량이 주어질 때, 특정 날짜에 회원가입을 하면 연속된 10일 동안 원하는 상품을 모두 할인받을 수 있는 날짜의 총 일수를 구하는 문제입니다.나의 풀이import java.util.*;class Solution { public int solution(String[] want, int[] number, String[] discount) { int answer = 0; // 1. 원하는 상품과 개수를 HashMap에 저장 HashMap wantMap = new HashMap(); for (int i ..
[프로그래머스] 완주하지 못한 선수 - 42576(Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/42576문제 설명이 문제는 마라톤에 참가한 선수와 완주한 선수의 명단이 주어졌을 때, 완주하지 못한 선수를 찾아내는 것입니다.participant 배열은 참가자 명단을,completion 배열은 완주자 명단을 제공합니다.모든 참가자는 단 한 번씩만 완주하거나 실패하며, 한 명의 선수가 중복으로 참가할 수 있습니다.나의 풀이기본 풀이import java.util.*;class Solution { public String solution(String[] participant, String[] completion) { HashMap hashmap = new HashMap(); ..
[자료구조] 해시의 개념과 예제(Java)
·
알고리즘/자료구조
해시의 개념해시(hash)는 해시 함수를 사용하여 변환한 값을 인덱스로 활용해 키와 값을 저장하고, 빠르게 데이터를 탐색할 수 있는 자료구조입니다.해시의 특징단방향성키를 통해 값을 찾을 수 있지만, 값을 통해 키를 찾는 것은 불가능합니다.탐색 속도평균적으로 O(1) 시간 복잡도로 데이터를 찾을 수 있습니다. 키를 해시 함수에 전달하면 값의 저장 위치를 바로 알 수 있으므로 별도의 탐색 과정이 필요 없습니다.해시 함수 필요키를 효율적으로 인덱스로 변환하려면 적절한 해시 함수가 필요합니다.해시의 활용 분야비밀번호 관리: 비밀번호를 직접 저장하지 않고, 해시 값을 저장하여 보안성을 강화.데이터베이스 인덱싱: 빠른 데이터 검색과 삽입을 지원.블록체인: 데이터 무결성을 유지하고, 보안성을 강화.해시 함수자바에서는..
[프로그래머스] 다리를 지나는 트럭 - 42583(Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/42583문제 설명다리 위에서 트럭들이 일정 시간 동안 다리를 건너는 상황을 시뮬레이션하는 문제입니다. 트럭은 다리의 길이를 넘지 않도록 동시에 다리를 건널 수 없으며, 다리의 최대 하중을 초과하지 않도록 트럭이 건너야 합니다. 각 트럭은 다리의 길이를 한 칸씩 지나갈 때마다 1초가 지나고, 트럭이 다리를 건너는 데 걸리는 시간은 트럭이 다리를 전부 건넌 후에 다른 트럭이 진입할 수 있게 됩니다.풀이이 문제는 큐(Queue) 자료구조를 사용하여 각 트럭의 진행 상황을 관리하고, 시간과 다리 위의 무게를 계산하는 방식으로 해결할 수 있습니다.다리 위 상태 업데이트: 각 트럭은 다리 위에서 진행..
[프로그래머스] 카드 뭉치 - 159994 (Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/159994문제 설명두 개의 카드 더미(cards1, cards2)와 목표 문자열 배열(goal)이 주어졌을 때, goal 배열의 각 문자열을 cards1과 cards2의 순서를 유지하면서 만들 수 있는지 판별하는 문제입니다. 각 카드 더미는 순서가 고정되어 있으며, goal 배열의 문자열 순서도 유지해야 합니다.나의 풀이1. 기본 풀이: 인덱스 활용각 카드 더미의 현재 위치를 나타내는 인덱스(idx1, idx2)를 활용해 순서대로 문자열을 비교합니다.goal의 각 문자열이 cards1이나 cards2의 현재 위치 문자열과 일치하면 해당 인덱스를 증가시킵니다.문자열이 일치하지 않으면 "No"..
[프로그래머스] 기능 개발 - 42586 (Java)
·
알고리즘/Java
문제 URLhttps://school.programmers.co.kr/learn/courses/30/lessons/42586문제 설명소프트웨어 개발 팀이 진행 중인 각 기능은 진도가 100%가 되어야 배포 가능합니다. 각 기능은 개발 속도가 다르며, 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포될 수 있습니다. 이때 각 배포마다 몇 개의 기능이 배포되는지를 계산하는 문제입니다.나의 풀이import java.util.*class Solution { public ArrayList solution(int[] progresses, int[] speeds) { ArrayList answer = new ArrayList(); ArrayDeque queue = new Arra..