본문 바로가기

전체 글

[백준,Java] 2178번: 미로 탐색 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 이전에 파이썬으로 풀었던 문제이지만 Java의 문법 공부와 함께.. 새롭게 풀어 본 문제입니다. bfs로 풀었으며 Scanner는 속도 이슈가 생겨서 안쓰고.. BufferedReader, StringTokenizer를 사용하였습니다. (이 개념은 다시 정리해보겠습니다.) 문법적인 문제로.. 컴파일 에러, 런타임 에러.. 많이 발생하였습니다.. 반성하고 자바로 앞으로 계속 연습할 생각입니다.. import java.util.*;.. 더보기
[네트워크] 접근 통제 정책 (MAC, DAC, RBAC) - 접근 통제 정책 어떤 상황에서 행위를 허용하거나 거부할 것인지에 대한 내용을 나타냅니다. 접근 통제 정책은 크게 세가지가 있습니다. - MAC (Mandatory Access Control) : 강제적 접근 통제 주체, 객체 등급기반 접근권한 부여 자원의 보안 레벨과 사용자의 보안 취급 인가를 비교하여 접근 제어를 합니다. 어떤 주체가 어떤 객체에 접근하려 할 때 양자의 보안 레벨(보안등급)을 비교하여 높은 보안을 요하는 정보가 낮은 레벨의 주체에게 노출되지 않도록 접근을 제한하는 방법 입니다. - DAC (Discretionary Access Control) : 임의적 접근 통제 접근 주체 신분기반 접근권한 부여 접근 주체가 속해 있는 그룹의 신원에 근거하여 객체에 대한 접근을 제한하는 방법 입니다.. 더보기
[프로그래밍 패러다임] 객체지향 프로그래밍 기초 (OOP) 이 글보다 이전 글에도 객체지향 설계와 스프링(SOLID)(https://wjddntjr555w.tistory.com/46)라는 이름으로 글을 썻지만 책을 보면서 읽은 내용을 한번 더 정리하려 합니다. 객체지향 프로그래밍(OOP, Object-Oriented Programming)은 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이티를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식. (반대 : 절차형 프로그래밍) 객체지향 프로그래밍의 특징 (추상화, 상속성, 다형성) 추상화 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미 상속성 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것 다형성 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것.. 더보기
[SNS서비스] Controller에서 Repository 바로 접근하지 않기(Controller와 Service를 구분하는 이유) SNS 서비스를 만들 당시.. 시간 제한을 놓고 만들다보니 다시 소스코드를 보는데 매우 당연하지만 수정이 코드가 있었습니다.. 스프링 서버를 만들 때 Layered Architecture를 참고하여 크게 3가지 계층으로 나눌 수 있습니다. Presentation layer : View 사용자로부터 데이터를 입력 받거나, 데이트를 출력해 보이는 계층입니다. Control layer : Controller View에서 사용자의 요청을 받아 응답을 처리하는 계층입니다. 주로 비즈니스 로직을 결정하는 역할을 수행합니다. 사용자의 요청을 검증, 로직에 요청을 전달, 로직에서 반환된 응답을 적절한 뷰로 연결 합니다. Business layer : Service 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 .. 더보기
파이썬 딕셔너리 lambda TypeError: bad operand type for unary -: 'str' 에러 관련 파이썬 딕셔너리(Dictionary)를 정렬할 때 보통 문자열에 정렬을 시도하는 경우가 있습니다. 오름차순은 위 사진과 같이 정상 작동하나 내림차순으로 정렬을 시도 시( -x[0]) 위 사진과 같이 TypeError: bad operand type for unary -: 'str' 에러가 발생합니다. 이 오류는 문자열로 된 값에 마이너스부호를 붙일 수 없다는 데에서 오는 오류이다. 물론 reverse=True 를 사용하여 반대로 정렬할 수 있습니다. 하지만, 이렇게 하나의 정렬 조건만 쓰는 경우가 아닌 x : (x[0], -x[1]) 와 같이 여러 정렬 조건을 쓰게 된다면 조건이 엉킬 수 있습니다. ----------------------- 파이썬에서는 이런 상황을 위해 안정적인(stable) 정렬 알고.. 더보기
해시 테이블 (Hash Table) with 파이썬 C언어로 해시 테이블을 먼저 구현해 본 나에게는 파이썬에서 이렇게 간단하게 불러서 쓸 수 있다니.. 놀랍기만 합니다. 파이썬에서의 해시 테이블은 딕셔너리라는 이름으로 구현되어 있습니다. 딕셔너리가 없는 언어에서는 1. 배열로 hash Table 생성 2-1. 키값을 입력 시 해시값을 변환해주는 함수 생성 2-2. 해시으로 해시테이블에 저장하는 함수 이렇게.. 보통 해시 테이블은 연속되지 않은 값들 혹은 문자가 들어간 값들을 한번에 찾을 때 사용하면 시간이 많이 단축됩니다. 해시 테이블의 장점 단점 장점 데이터 저장/읽기 속도가 빠르다. (검색 속도가 빠르다.) 해쉬는 키에 대한 데이터가 있는지(중복) 확인이 쉬움 단점 일반적으로 저장공간이 좀더 많이 필요하다. 여러 키에 해당하는 주소가 동일할 경우 충돌.. 더보기
[백준] 1927번: 최소 힙 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net from heapq import heappush,heappop import sys n = int(input()) q = [] # put, get for i in range(0, n): x = int(sys.stdin.readline()) if x == 0: # pop if(len(q) == 0): print(0) else: print(heappop(q)) else : # pus.. 더보기
[백준] 11399번: ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net n = int(input()) arr = list(map(int, input().split())) arr.sort() sum = 0 result = 0 for i in range(0,n): result += sum+arr[i] sum += arr[i] print(result) 그리디 문제로.. skill 언어만 사용하던 나에게 오랜만에 문법 공부..? 정도로 풀었습니다.. 더보기