자바 60

(SWEA) 1230. [S/W 문제해결 기본] 8일차 - 암호문3

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 0 ~ 999999 사이의 수로 표현되는 암호문이 있고, 이 암호문을 N개 모아 놓은 암호문 뭉치가 있다.암호문 뭉치를 급히 수정해야 할 일이 발생했는데, 암호문은 특수 제작된 처리기로만 수정이 가능하다.처리기는 다음과 같이 3개의 명령어로 제어한다.1. I(삽입) x, y, s : 앞에서부터 x번째 암호문 바로 다음에 y개의 암호문을 삽입한다. s는 덧붙일 암호문들이다.[ ex) I 3 2 12315..

알고리즘/swea 2025.01.21

(CS) 정렬 - 퀵 정렬

분할 정복 방식을 사용하여 피벗을 기준으로 데이터를 분할하며 정렬하는 방법일반적인 경우, 정렬 중 가장 빠르고, 대부분 효율적이다. 내부 정렬에 적합하며, 메모리에 올려놓고 정렬하기 때문에, 효율이 좋다. 최악의 경우, n^2의 시간 복잡도가 발생할 수 있다.추가 메모리 없이 정렬을 하지만, 재귀 호출을 하기 때문에, 스택 오버플로우의 위험이 있다. 대부분의 실무 정렬에서 사용대용량 데이터에서 효과적데이터 베이스 정렬, 웹 페이지 정렬에서 자주 사용 public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low

CS/기타 2025.01.21

(SWEA) 10726. 이진수 표현

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXRSXf_a9qsDFAXS SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 정수 N, M 이 주어질 때, M의 이진수 표현의 마지막 N 비트가 모두 1로 켜져 있는지 아닌지를 판별하여 출력하라. 첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.각 테스트 케이스는 다음과 같이 구성되었다.첫 번째 줄에 정수 N, M이 주어진다. (1 ≤ N ≤ 30 , 0 ≤ M ≤ 10^8)각 테스트 케이스마다 한 줄씩 마지막 N개의 ..

알고리즘/swea 2025.01.20

(CS) 디자인 패턴 - 전략 패턴

전략 패턴 (정책 패턴)정의행동을 정의하는 여러 알고리즘을 캡슐화 하고, 이들 중 하나를 선택하여 사용할 수 있도록 만드는 디자인 패턴교체시기는 런타임 시점에 진행장점유연성알고리즘을 쉽게 교체하거나 확장할 수 있다유지보수성각 알고리즘이 별도의 클래스에 정의되어 있기 때문에 코드 수정이 간단하다개방/폐쇄 원칙 준수 (SOLID에서 OCP 파트)기존 코드를 수정하지 않고 새로운 알고리즘을 추가할 수 있다. → 확장성 또한 가지고 있다단점복잡성 증가알고리즘마다 클래스를 생성해야 하기 때문에, 클래스가 많아진다.사용자 혼란 가능성사용자가 어떤 전략을 선택해야 할지(알고리즘이 너무 많아서) 명확하지 않을 수 있다.사용하는 곳런타임에 알고리즘을 변경해야 할 때특정 동작을 여러 방식으로 구현해야 할 때코드가 조건문(..

CS/디자인 패턴 2025.01.09

(CS) 디자인 패턴 - 팩토리 패턴

팩토리 패턴정의객체를 사용하는 코드에서, 객체 생성 부분을 떼어내 추상화한 패턴상속 관계에 있는 두 클래스에서 상위 클래스가 뼈대를 결정하고, 하위 클래스에서 객체의 구체적 내용을 결정하는 패턴장점유연성상위, 하위 클래스가 분리 되기 떄문에 loose 한 결합을 가진다.인스턴스 생성방식에 전혀 알 필요가 없다캡슐화객체 생성 로직이 따로 떼어져 있기 때문에 리팩토링시, 특정 위치만 고치면 되므로, 유지 보수성이 증가한다.확장성새로운 클래스 추가 시 기존 코드를 수정하지 않고 확장할 수 있다단점복잡성 증가클래스가 많아지기 때문에, 코드 구조가 복잡해질 수 있다추가 계층팩토리 클래스가 추가되기 때문에, 코드의 가독성이 낮아질 수 있다사용하는 곳객체 생성 로직이 복잡한 경우객체 생성 시점이나 생성 방법을 유연하..

CS/디자인 패턴 2025.01.09

(CS) 의존성 주입

의존성 주입정의 : 객체 간의 의존 관계를 외부에서 주입하는 설계 패턴 원칙상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.두 모듈은 모두 추상화에 의존해야 한다추상화는 세부사항에 의존하지 않아야 한다.장점모듈화와 재사용성객체 간의 결합도를 낮추어 모듈화가 쉬워지고, 코드의 재사용성을 높일 수 있다테스트 용이성의존성을 외부에서 주입받기 때문에, 테스트시 Mock 객체를 쉽게 주입할 수 있다.유지보수성객체 간의 직접적인 결합이 줄어들어, 변경 사항이 다른 객체에 미치는 영향을 최소화 할 수 있다.코드 가독성의존성을 명시적으로 주입하므로 코드의 의도를 파악하기 쉽다확장성객체를 쉽게 교체하거나 확장할 수 있기 때문에, 유연한 시스템 설계가 가능하다. 단점초기 설정 복잡성Spring과 같은 DI 컨..

CS/기타 2025.01.09

(CS) SOLID 원칙

급하신 분들은 마지막에 요약해놨으니, 그부분만 보셔도 무관합니다! 들어가기에 앞서...♤ 객체 지향 프로그래밍?정의절차적 프로그래밍 : 반복될 가능성이 있는 것들을 재사용이 가능한 함수로 만들어 사용하는 방식OOP : 특정한 개념의 함수와 자료형을 함께 묶어서 관리하기 위해 탄생한 방법객체 내부에 자료형(field)와 함수(method)가 같이 존재함.중요한 4가지 특징추상화필요로 하는 속성이나 행동을 추출하는 작업세부적인 사물들의 공통적인 특징을 파악 후, 하나의 집합으로 만들어 내는것. (아우디, 벤츠는 모두 “자동차” → 자동차 라는 추상화 집합을 만듬!. 여기서 공통 특징을 만드는 것!!)캡슐화낮은 결합도를 유지할 수 있도록 설계하는 것한 곳에서 변화가 일어나도, 다른 곳에 미치는 영향을 최소화시..

CS/기타 2025.01.07

<백준> 7785번 회사에 있는 사람

https://www.acmicpc.net/problem/7785  상근이는 세계적인 소프트웨어 회사 기글에서 일한다.이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다.이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가..

알고리즘/백준 2024.11.21

<프로그래머스> 숫자 게임

https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다.먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.각 사원은 딱 한 번씩 경기를 합니다.각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.만약 숫자가 ..

<프로그래머스> 두 큐 합 같게 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다.큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼..