[백준 알고리즘] 1021번: 회전하는 큐 (Python / 파이썬)
·
알고리즘/백준
문제 설명 지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다. 지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다. 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다. 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다. 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다. 큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때..
[백준 알고리즘] 2493번: 탑 (Python / 파이썬)
·
알고리즘/백준
문제 접근 간단히 생각해보면 오른쪽 -> 왼쪽으로 레이저를 쏴주므로 탑 리스트를 역순회하면서 오른쪽보다 큰 값인지 확인해야 한다. 6->5->4->7 과 같이 순회하는 경우 6,5,4 높이의 탑은 모두 7에서 수신한다. 따라 아직 수신되지 못한 신호를 보낸 탑들을 저장해 두어야 하는데 스택이 적합하다. 하나의 탑을 체크할때마다 스택의 top을 계속 확인하면 될것 같다. 스택이 비지 않았다면 top에 쌓여있는 걸 현재 탑의 높이와 비교하면서, 현재탑보다 낮은 것이 쌓여있다면 그것들은 다 pop하고 정답 배열에 추가하거나 바로 출력하면 된다. 위 작업을 하고 나서 스택에 현재 탑을 넣어준다. 중요한 부분은, 스택에 쌓여 있는 탑들과 현재 탑을 비교하고, pop하는 거까지는 문제가 없어도 그 스택에 쌓인 탑들..
[백준 알고리즘] 3273번: 두 수의 합 (Python / 파이썬)
·
알고리즘/백준
문제 접근 이중포문을 돌리면 쉽게 풀 수 있지만, 시간초과가 날 것 같아 계산을 해봤다. 파이썬 기준 제한시간 1초 => 1*3+2 = 5초, 5 * 2000만번(연산) = 약 1억번 연산이 가능 n이 최대 10만이므로 O(n^2)의 알고리즘을 적용할 경우 최악의 경우 10,000,000,000(백억번)의 연산을 해야 한다. 즉 시간초과가 나므로 다른 방법을 사용하는데, 투 포인터 방법이 정석인 것 같고 파이썬의 경우 in 연산자로 푸는 것도 가능하다. 정답 코드 1 (투 포인터) import sys n = int(sys.stdin.readline()) a = sorted(list(map(int, sys.stdin.readline().split(" ")))) x = int(sys.stdin.readlin..
[백준 알고리즘] 14502번: 연구소 (Python / 파이썬)
·
알고리즘/백준
문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 ..
[소프트웨어공학] Software Testing
·
CS/소프트웨어공학
Program testing의도1: 프로그램이 의도된 작업을 수행한다는 것을 보여주기 위함의도2: 프로그램을 사용하기 전에 프로그램 결함을 발견하기 위함만들어진 인위적 데이터를 가지고 한다.error 발견, 예외 처리, non-funcitonal에 대한 비정상적 동작도 탐지Error의 존재를 밝힐 수는 있지만, error가 없다는 것은 밝힐 수 없음 Testing's Goal#1  개발자와 고객의 요구사항을 충족하는지 확인 (Validation testing)대상이 있기에 입출력 값이 확실하다예측 값이 나오는지 확인의도한 대로 움직이는 것이 성공적인 테스트!For custom software요구사항 명세에 기재된 모든 요구 사항에 대하여 최소한 1개 이상의 test를 진행하여야 한다.For generic..
[소프트웨어공학] Design and Implementation
·
CS/소프트웨어공학
Design and Implementation 둘은 서로 밀접히 연관되어 있음 설계는 창의적 활동, 구현은 설계를 하나의 형태로 만드는 것 Commercial-off-the-shelf(COTS) 구축보다 구매가 더 나을 수 있다. 예를 들어 의료 기록 시스템을 개발하고자 한다면, 병원에서 사용하는 시스템 패키지를 구매하는 게 더 효율적일 수 있다. An object-oriented design process 객체지향 개발 방법론은 굉장히 넓고 방대한 과정을 포함하기에 간단한 시스템이나 agile 경우 일부만 추출해 사용하는 것이 좋다. Process Stage Define the context and modes of use of the system - use case, table 이용 Design the..
[소프트웨어공학] Architectural Design
·
CS/소프트웨어공학
Architectural Design이란? 시스템 전체 골격을 세우는 단계 sw system 안에서 요소와 객체가 어떻게 구성될 것인지 결정 requirement engineering과 디테일한 설계의 중간 연결 단계 일부 명세 작업과 병행하는 경우도 있음 (Twin-Peak) 주요한 시스템 구성요소와 해당하는 커뮤니케이션을 식별 및 정의하는 것을 포함 명확한 구조의 장점 Stackholder communication System Analysis .. 비기능적 요구사항을 충족 가능한지 분석 Large scale reuse : 요구사항이 유사하다면 구조가 비슷하므로 큰 스케일로 재사용 가능 Architectural representations 엔티티와 블록 관계를 보여주는 단순한 block diagram ..
[소프트웨어공학] System Modeling
·
CS/소프트웨어공학
System Modeling이란? 시스템의 추상적 모델을 개발하는 과정 각 모델에 따라 다른 관점을 가진다 UML 표기법을 기반으로 그래픽적인 표기를 한다 (말로 표현하는 것이 모호하기 때문) 개발자나 고객이 시스템을 이해하고 분석하는 데 도움 Existing and planned system models 이미 동작하는 시스템을 그림, 글로 표현하여 현재 시스템의 문제나 새로운 시스템의 요구사항을 추출하는 데 사용 Stackholders(이해당사자), 개발자들에게 용이한 설명, 요구사항 간결히 전달 model-driven engineering process : 모델링으로 만들어진 기호를 그대로 코드로 구현. (프로그래밍 불필요) System perspective 1) External perspective..
[컴퓨터구조] Branches
·
CS/컴퓨터구조
Conditional Operations (조건부 연산자) 값에 따라 결정을 내리는 연산자이다. 조건이 true인 경우 labeled instruction으로 branch한다? 조건이 아닌 경우 continue 한다. beq, bne, j의 세 가지 연산자 먼저 보면 1) beq rs, rt, L1 - rs, rt가 같으면 L1로 점프한다. 2) bne rs, rt, L1 - rs, rt가 같지 않으면 L1로 점프한다. 3) j L1 - 그냥 L1으로 점프한다. C에서 쓰는 if-Else가 어떻게 컴파일링될까? if (i==j) f = g + h; else f = g - h; 다음과 같은 c코드가 있다. 한줄씩 해석하면 i가 j와 같다면 + 연산을 하고, 그렇지 않다면 - 연산을 하라는 것이다. 이는 M..
[git] 삭제한 로컬 브랜치 원격저장소에 업데이트하기
·
Git
브랜치 삭제 git branch -d 브랜치 강제 삭제 git branch -D 삭제한 브랜치를 원격 저장소에 반영 git push origin --delete