분류 전체보기
[백준] 14950 정복자 - Java
[백준] 14950 정복자 - Java
2022.11.01최소 스패닝 트리를 사용하는 문제임을 알아챘으면 풀이하기 쉬워진다. 어떤 순서로 정복하든, 비용의 증가는 막을 수 없기에 주어진 그래프에서 MST를 구해주고 증가하는 정도를 따로 계산해주면 된다. import java.io.*; import java.util.*; public class Main { static int INF = 987654321; static int N, M; static int K; static ArrayList list = new ArrayList(); static int[] parent; static int[] cost; static int min = INF; public static void main(String[] args) throws IOException{ BufferedR..
[시스템 프로그래밍] 프로시저
[시스템 프로그래밍] 프로시저
2022.10.28프로시저, 함수, 메서드.. 모두 같은 말이다. 그러니 혼용해서 사용해도 괜찮다. 함수 내부에서 다른 함수를 호출하는 방식의 코드를 접한 적이 있을 것이다. C를 공부할 때 스택메모리가 활성화돼서 함수를 호출할 때 마다 스택의 윗부분에 올리는 방식으로 작동한다고 배웠는데, 어셈블리에서는 이 내용이 어떻게 구현되는지 살펴보자. 어셈블리에서 프로시저를 다룰 때 세 가지가 처리된다. 1. 제어의 전달 함수 내부에서 다른 함수를 호출할 때, 실행 중인 함수를 잠시 멈추고 호출한 함수를 실행해야 한다. 즉, ProgramCounter를 호출한 함수의 시작주소로 설정하고 함수가 리턴될 경우를 대비해 원래 실행하던 함수의 위치도 저장한다. 2. 데이터의 전달 함수를 호출할 때 인자로 정보를 전달하고, 함수가 리턴될 ..
[백준] 1194 달이 차오른다, 가자 - Java
[백준] 1194 달이 차오른다, 가자 - Java
2022.10.27외판원 순회 문제를 푼 적이 있다면 쉽게 풀 수 있는 문제이다. 주의할 점은 다음과 같다. 1. 열쇠를 먹은 후에는 돌아올 수 있어야 한다. visit배열을 3차원으로 설정하자. 2. 열쇠는 비트마스킹으로 처리해준다. 3. 최단 거리를 구해야 하니 bfs를 사용해 순회하자. 비트마스킹과 visit배열을 3차원으로 설정하는 부분만 주의하면 다른 bfs 최단거리 문제와 같다. import java.io.*; import java.util.*; public class Main { static int[] dr = {-1,1,0,0}; static int[] dc = {0,0,-1,1}; public static void main(String[] args) throws IOException { BufferedRe..
[백준] 1939 중량제한 - Java
[백준] 1939 중량제한 - Java
2022.10.26그래프 탐색 알고리즘과 이분 탐색 알고리즘을 함께 사용하는 문제이다. 공장을 두 개 입력받으니, 시작 공장과 도착 공장이 정해진다. 시작 공장에서 도착 공장까지 가려면 중간에 다리를 많이 건너야 한다. 다리가 버틸 수 있는 최대 무게가 이분 탐색에서의 Right 부분이 되고, Left부분은 0으로 설정된다. 이제 문제를 바꿔서 생각해보자. 시작 공장에서 중량이 x인 물품을 옮길 때 도착 공장까지 옮길 수 있는가? 옮길 수 있으면 답을 갱신하고, 옮길 수 없으면 Right 부분을 갱신한다. import java.io.*; import java.util.*; public class Main { static int INF = 987654321; static int N, M; static ArrayList[] ..
[JavaScript] JSON
[JavaScript] JSON
2022.10.25JavaScript Object Notation의 약자로, 데이터를 교환하기 위한 format이다. JavaScript -> JSON / JSON -> JavaScript 두 방향으로 변환할 수 있어야 한다. JSON은 function / date / undefined를 다룰 수 없다. String, Number, Object, Array, Boolean, null {"name " : "asdf"} {"age" : 13} {"object" : {"name" : "a", "age" : "12" ... }} {"arr" : [1,2,3,4]} {"flag" : true} {"nulls" : null} JSON 타입의 데이터는 서버에 저장돼 관리되고, 클라이언트는 서버의 데이터를 가져와서 사용할 수 있어야 한..
[백준] 3109 빵집 - Java
[백준] 3109 빵집 - Java
2022.10.25파이프를 가장 많이 연결하기 위해서는.. 1. 첫 번째 행 부터 탐색한다. 2. 다음 열을 탐색 할 때는 ↗ → ↘ 순서로 탐색해야 한다. (그리디) 3. 파이프를 겹쳐서 설치하면 안되니, 방문 처리를 확실하게 해 주자. 탐색 순서가 정해져 있기 때문에, 탐색 시 bfs를 사용하면 안 된다. import java.io.*; import java.util.*; public class Main { static int R, C; static char[][] map; static boolean[][] visit; static int[] dr = {-1,0,1}; static int[] dc = {1,1,1}; static int ans = 0; static boolean flag = false; public s..
[HTML] Layout (1)
[HTML] Layout (1)
2022.10.25기존에는 HTML에서 영역을 나눌 때 div태그에 id값을 지정해 주는 방식을 사용했다. 하지만 여러 개발자들이 각각 다른 id를 사용하게 되고, HTML 코드의 일관성이 떨어져 새로운 방법을 고안했다. 각각의 레이아웃에 대응되는 새로운 태그를 만들어 화면을 구성하는 방법을 사용한다. CSS FlexBox : 컨테이너 내부에 요소를 배치한다. 가로 또는 세로를 기준으로 요소를 배치한다, CSS Grid : 컨테이너 애부에 요소를 배치한다. 2차원 좌표평면을 기준으로 요소를 배치한다. 두 가지 모두 HTML 요소를 배치할 때 유용하게 사용된다. Semantic Element 태그만 봐도 직관적으로 해당 태그가 무슨 역할을 하는지 유추할 수 있는 Element를 의미한다. : 내부에 제목과 내용을 포함한다...
[HTML] Form (1)
[HTML] Form (1)
2022.10.25output oninput : input을 받을 때 마다 x를 갱신한다. range : 막대기로 값 입력 number : validation으로 숫자만 입력하도록 설정함. 이 외에도 여러 가지 input type 속성이 있으니 이런게 있구나~ 정도만 생각해두고 필요할 때 찾아서 사용하자. 속성 값이 직관적이라서 어떤 역할을 하는지 이해하기 쉽다. 속성 값을 사용해 편하게 validation을 수행할 수 있다. 당연히 자바스크립트와 백엔드 언어로도 validation을 수행해야 하고, html은 추가로 사용한다고 생각하자. input 태그에서 min max 속성을 설정해서 입력할 수 있는 최소치와 최대치를 설정할 수 있다. readonly : 커서를 놓을 수는 있지만 값을 변경 할 수는 없음. 대신 sub..
[시스템 프로그래밍] 어셈블리어 - 반복문
[시스템 프로그래밍] 어셈블리어 - 반복문
2022.10.24조건문은 어셈블리어의 jX 명령어와 대응되지만, 반복문은 어셈블리어에서 대응되는 명령어가 없다. 즉 jX 명령어와 몇 가지 다른 명령어들의 조합으로 반복문을 구현해야 하는데, 이제 그 예시를 살펴보자. do-while do-while은 실행식이 무조건 한 번은 꼭 실행된다는 부분을 제외하면 while문과 같은 역할을 한다. 위의 그림은 do-while 문법을 goto 문법으로 표현한 후 어셈블리어로 변환하는 예시이다. while while문은 조건식에 따라 실행식이 한 번도 실행되지 않을 수도 있다. while문을 어셈블리어로 변환하는 예시를 살펴보자. 1. Jump to Middle goto 문법을 사용해 바로 조건식으로 이동시키고, 실행식 내부에서 goto 문법을 통해 조건식에 따라 실행식으로 이동시..
[시스템 프로그래밍] 어셈블리어 - 조건문
[시스템 프로그래밍] 어셈블리어 - 조건문
2022.10.23어셈블리어에서 조건문을 이해하기 전 알아야 하는 지식이 있다. %rsp 레지스터에는 현재 스택의 위치를 저장하고, %rip 레지스터에는 다음 명령어를 가져올 주소를 저장하고 있으며, %rax 레지스터는 연산 시 임시로 값을 저장할 때 사용된다. CF / SF / ZF / OF 레지스터들은 각각 1비트 레지스터로, 산술 연산의 결과에 따라 값에 설정된다. (lea 명령어는 제외) 이렇듯, CPU는 내부의 다양한 레지스터들을 사용해 상태를 저장한다. 위의 1비트 레지스터들은 Condition Code로 불리고, 특정 조건을 만족시키면 1로 세팅된다. CF : Carry Flag. MSB에서 Carry가 발생하면 1로 설정된다. ZF : Zero Flag. 연산의 결과가 0이면 1로 설정된다. SF : Sig..
[PHP] PHP 정리 (2)
[PHP] PHP 정리 (2)
2022.10.19get : 페이지를 북마크 할 때 사용될 수 있음. URL에 보낸 정보가 표시되니 민감한 정보는 보내지 말자. post : 정보 길이에 제한이 없음. 보통 post 방식을 사용함. 보안에도 좋음. form을 통해 전달된 데이터들을 php에서 처리할 때 값을 검증할 필요가 있음. 사용자가 form에다가 html태그들을 넣으면 비정상적으로 작동할 수 있기 때문. (예약어를 명령어로 인식하지 않고 보여주도록 해야 한다) $_SERVER["PHP_SELF"] : $_SERVER는 super global 중 하나고, PHP_SELF로 현재 작업하는 파일 이름을 제공한다. 즉, 위의 내용은 페이지 접속 시 적당한 내용으로 바뀐다. htmlspecialchars() 메서드를 통해 예약어를 명령어로 인식하지 않도록 설..
[C++] OOP (4) Type Casting
[C++] OOP (4) Type Casting
2022.10.19부모 타입의 포인터가 자식 타입의 객체를 가리키도록 해서 UpCasting을 구현할 수 있는데.. 자식 객체는 부모 객체보다 더 많은 정보를 가지고 있기 때문에 부모 타입의 포인터로 자식 타입만 가지고 있는 정보에 접근하는건 불가능하다. 부모 타입인 Car에는 money 메서드가 없지만, 자식 타입인 Bus에는 money 메서드가 있다. 따라서 Car* 타입으로는 자식 타입인 Bus의 정보에 접근 할 수 없다. foo 내부 함수를 바꿔보자. void foo(Car* car) { Bus* bus = static_cast(car); bus->money(); } Car* 타입을 Bus* 타입으로 바꿨다. (DownCasting) DownCasting은 위험할 수 있다. 위에서 언급했듯 부모보다 자식에 정보가 ..