Computer Sciences(236)
-
[Programmers] 숫자 문자열과 영단어 - Java
https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 이 문제는 replaceAll() 메서드만 알고 있으면 간단하게 풀리는 문제다. class Solution { private static String[] nums = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; public int solution(St..
2021.12.12 -
Interpreter Pattern
개요 인터프리터는 프로그래밍 언어를 처음 배울 때 아마 많이 접했을 것이다. C, Java(명백히 말하면 아니지만)와 같은 언어를 컴파일 언어라고 하고 파이썬, 자바스크립트 같은 언어를 인터프리터 언어라고 한다. 인터프리터 언어는 컴파일이 아니라 코드 한 줄 한 줄을 해석하고 실행하기 때문에 간편하고 빠른 결과를 확인할 수 있다. 인터프리터 패턴은 이와 같이 간단한 문법을 해석할 때 사용되는 패턴이다. 말로 설명하는 것보다 코드로 이해하는 것이 더 빠르므로 바로 예제로 들어가자. 예제 - 자동차 전진 프로그램 자동차를 전진시키는 프로그램을 만들고자 한다. 커맨드로 움직임을 구현할 것인데 명령어 구성은 다음과 같다. program: 프로그램을 시작하는 커맨드 repeat: 루프를 시작하는 커맨드 go: 현..
2021.12.12 -
Memento Pattern
개요 메멘토 패턴(Memento Pattern)은 객체를 이전의 상태로 복구시켜야 하는 경우에 사용되는 패턴이다. 복원, 작업 취소 등의 작업이 필요할 때 사용된다. 시나리오 한 주사위 게임이 있다. 이 게임은 주사위가 1이 나오면 100원을 얻고 2가 나오면 현재 보유한 돈이 절반이 된다. 특별한 숫자인 6이 나오면 과일을 받는다. 돈이 전부 떨어지면 게임이 종료된다. 여기서 우리는 부정행위(?)를 하려고 한다. 현재 돈이 이전보다 많아지면 현재 돈을 저장해놓는다. 그러다가 나중에 돈이 너무 적어지면 저장해놓은 돈으로 복구시킨다. Class Diagram 코드 import java.util.ArrayList; import java.util.List; public class Memento { privat..
2021.12.11 -
Flyweight Pattern
개요 Flyweight는 격투기에서 가장 가벼운 몸무게 범주에 속한다. 그렇다면 이 패턴 또한 무언가를 가볍게 처리한다고 미루어 짐작할 수 있다. Flyweight 패턴은 어떤 클래스의 인스턴스 한 개를 이용하여 가상 인스턴스를 제공하고 싶을 때 사용한다. 예를 들어 스타크래프트를 생각해보자. 마린(해병)은 움직이기, 총 쏘기, 스팀팩 등 모두 공통적인 기능을 사용한다. 이때 200명의 마린 인스턴스를 전부 생성한다고 어떨까? 분명 공통적인 부분은 전혀 변하지 않는다. 그러나 모든 인스턴스가 이를 각자 가지고 메모리에 올라가기 때문에 불필요한 메모리 낭비가 발생한다. 이 패턴을 다시 말하면 어떤 클래스의 공통적인 기능들을 하나의 인스턴스를 공유하도록 하여 메모리를 절약하는 패턴이다. 이제 예제 코드를 살..
2021.12.11 -
[Programmers] 신규 아이디 추천 - Java
https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 문제를 보자마자 정규식을 써서 풀어야 될 거라고 생각했다. 자바에서는 replaceAll()이라는 함수로 정규식을 이용해 문자열을 치환할 수 있다. 정규식을 알면 어렵지 않게 풀 수 있는 문제다. 정규식은 간략하게 정리하면 다음과 같다. 자바에서 정규식을 쓸 때 주의할 점은 정규식 기호를 문자로 매칭하려면 백슬래시(\)를 두 개 붙어줘야 한다. Group..
2021.12.11 -
Visitor Pattern
개요 방문자 패턴(Visitor Pattern)은 데이터 구조와 처리를 분리하는 패턴이다. 무슨 말인지 잘 와닿지 않을 것이다. 시나리오를 통해 알아보도록 하자. 시나리오 사용자가 내 컴퓨터의 디렉토리를 순회할 수 있는 프로그램을 만들어달라고 한다. 우리는 이를 재귀를 통해서 해결할 수 있다. 대략적으로 코딩하면 다음과 같을 것이다. // 디렉토리면 하위 디렉토리를 다시 순회하고 아니면 파일 정보 출력 if(file.isDirectory()) { Iterator iter = file.iterator(); iter.search(); } else { System.out.println(file.toString()); } 그런데 이젠 사용자가 각 파일에 대해 순회하면서 이름만 가져오는 기능도 원한다. 그렇다면 ..
2021.12.11