문제 출처
아래 블로그에서 추천해준 문제들에 대한 문제 풀이. 여기 없는 문제도 몇 개 있다. https://covenant.tistory.com/224
키자드에 등록된 총 133개의 포스트를 확인하실 수 있습니다.
아래 블로그에서 추천해준 문제들에 대한 문제 풀이. 여기 없는 문제도 몇 개 있다. https://covenant.tistory.com/224
https://www.acmicpc.net/problem/2501 벡터를 생성하고 N을1부터 N까지의 수로 나눈 다음 나누어 떨어지는 숫자(약수)를 벡터에 추가해줬다. 벡터에는 약수만 있으므로 K-1번째(인덱스는 0부터 시작하므로) 숫자를 출력해주면 된다. 단, 벡터의 크기가 K보다 작으면 K째 작은 약수가 없으므로 0을 출력해준다.
https://www.acmicpc.net/problem/3460 테스트 케이스 T크기의 배열을 만들어준 다음, T의 모든 원소를 이진수로 변환하고 1의 인덱스를 출력해주면 된다. 이진수 변환은 손으로 직접 해본 결과 몫이 0일때까지 계속 나눠주다가 몫이 0이 되면 끝에 1을 붙여주면 된다.
https://www.acmicpc.net/problem/10818 숫자를 입력받을때마다 최대, 최소값을 초기화해준다. 최대, 최소값 초기화는 문제의 조건에 따라 각각 최소, 최대값으로 설정한다.
https://www.acmicpc.net/problem/2460 각 역마다 사람 수를 구하고, 최대값을 따로 저장하면 된다.
https://www.acmicpc.net/problem/10870 재귀 버전으로 간단하게 풀었다. for문으로도 풀어봤다(주석 참고).
https://www.acmicpc.net/problem/2309 모든 난쟁이의 키를 더한 다음 100을 빼준 값을 sum에 저장한다. 두 수의 합이 sum을 만족하는 숫자 두 개를 찾기만 하면 된다.
https://www.acmicpc.net/problem/2609 최대공약수는 유클리드 호제법을 사용하여 쉽게 구할 수 있다. 유클리드 호제법은 아래와 같다. a, b 두 수가 있다. 이때 a는 항상 b보다 커야한다. a % b = c b % c = d c % d = 0 이면 a, b의 최대공약수는 d다. 재귀 함수로 간단하게 구현할 수 있다. 최소공배수는 두 수의 곱에 최대공약수를 나눠주면 된다.
https://www.acmicpc.net/problem/2693 그냥 정렬해주고 7번째 인덱스 출력해주면 끝이다. 초간단..
https://www.acmicpc.net/problem/1978 소수는 약수가 1과 자기 자신인 수 뿐이다. 소수인지 판별해주는 isprime() 함수를 만들고 입력값이 소수면 정답을 1씩 증가시켜주면 된다.
https://www.acmicpc.net/problem/1292 수열의 인덱스(idx)가 A보다 크거나 같으면 ans에 num을 더해주고, idx가 B와 같아지면 멈춰주면 된다.
[ 동적 배열 vs 정적 배열 ] 1. 정적 배열 정적 배열은 스택이라는 메모리 영역에 할당된다. 일반적으로 Visual Studio는 스택 크기를 1MB로 설정하기 때문에, 이를 초과하면 스택 오버플로우가 발생하고 운영체제가 프로그램을 종료한다. 즉, 배열의 크기가 1MB를 넘기면 오류가 발생한다. 정적 배열에 대한 메모리는 프로그램이 실행될 때 한 번 할당되며, 프로그램 수명 내내 지속한다. 2. 동적 배열 동적 배열은 힙이라는 메모리 영역에 할당된다. 힙의 메모리 풀은 스택보다 크기 때문에 큰 크기의 배열을 저장할 수 있다. 최신 시스템에서는 힙 크기가 기가바이트 단위가 될 수 있다. 동적 배열은 동적으로 할당해줘야 한다. 동적 할당은 n.......
*참고* 연산자 오버로딩에서 대입 연산자(=)는 기본적으로 지원한다. 하지만 연산자 정의를 해주지 않으면 얕은 복사를 해준다. 이는 잘못하면 메모리 누수 현상이 발생할 수 있는데, 예시는 아래 글을 참고하면 된다. 할당해제가 필요한 경우 대입 연산자를 정의해주는 것이 좋다. https://blog.hexabrain.net/177
HTTP는 HyperText Transfer Protocol로 쉽게 말해서 html을 주고 받기 위한 규칙이다. 그러나 이는 옛말이고 지금은 HTTP로 거의 모든 것을 전송한다고 한다. html, 사진, 음성, 영상, 파일, json, xml 등 거의 모든 형태의 데이터가 전송 가능하다. HTTP의 특징은 아래와 같다. 1. 클라이언트 - 서버 구조 클라이언트와 서버는 독립적이라는 뜻이다. HTTP 프로토콜은 '요청'과 '응답'으로 이루어지는데 일반적으로 요청을 보내는 곳은 클라이언트, 응답을 보내는 곳은 서버라고 한다. 2. 무상태 (stateless) stateless란 말 그대로 상태를 저장하지 않는다는 뜻이다. 상태란 클라이언트의 정보라고 할 수 있다. HTTP는 무상.......
1. GET GET 메소드는 자원 요청 메소드다. HTTP를 통해 식별 가능한 정보를 검색한다고 말할 때, GET 요청을 보낸다고 생각하면 된다. 유의할 점은 쿼리 내용이 URI에 그대로 표현되기 때문에 보안상 문제가 될 수 있다. 캐싱된다는 특징이 있다. 2. POST POST 메소드는 서버에 데이터를 등록하는 메소드다. 서버에 보내지는 데이터 내용은 POST의 body 부분에 있다. 캐싱되지 않는다는 특징이 있다. 참고로 GET과 POST는 가장 많이 쓰이는 메소드로 form 태그에서 많이 호출된다. form 태그 속성 중에 action에는 폼을 전송할 스크립트 파일이 담기고, method에서 HTTP 메소드를 정한다. input 태그의 데이터들이 req.body에 저장된다. 3. PUT, .......
상태코드란 클라이언트가 서버에 요청을 보내면 서버에서 그 요청을 어떻게 처리했는지 알려주는 코드다. 상태코드의 종류는 굉장히 많지만 크게 앞지리 숫자로 구분할 수 있다. 앞자리 숫자가 무엇을 의미하는지 알아보고, 대표적인 상태코드를 알아보자. 1xx (Informational): 요청이 수신되어 처리중 2xx (Successful): 요청 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함 1xx 꼴의 상태코드는 거의 사용되지 않으므로 생략한다. 2xx (Successful) 200 OK : 요.......
[ int 와 long의 차이점 ] 위 예제를 보면 int와 long의 크기가 동일하고 표현할 수 있는 값의 범위도 동일한 것을 볼 수 있다. 차이점이 뭘까 찾아봤는데 하드웨어, OS, 컴파일러 모두가 영향을 주는 것 같다. 따라서 뭐라고 특정짓기는 어렵다. 단, 아래와 같은 규칙은 적용된다. short<=int<=long<=double
늘 궁금했던 것이 있다. 인터넷 상에서 컴퓨터들은 어떻게 통신할까? 지구 정 반대편에 사는 사람과 인터넷으로 통신할 수 있다는게 늘 신기하다고 생각했었다. 모든 통신은 어떤 규칙을 따른다. 컴퓨터 세계에서는 이 규칙을 ‘프로토콜’이라고 부른다. 컴퓨터 용어에서 뒤에 ‘P’로 끝나는 용어들은 프로토콜의 일종일 가능성이 높다(아님 말고). 인터넷에서 가장 기본적인 프로토콜은 모든 사람들이 흔히 아는 IP(Internet Protocol)이다. 네이밍이 굉장히 정직하고 직관적이다. 모든 컴퓨터에는 고유 IP가 부여된다. 엄밀히 말하면 고유한 공인IP가 부여되는데 공인/사설 IP는 여기서 다루지는 않겠다. IP의 특징은 아래와 같다. - 지정한.......
포트 모든 컴퓨터는 IP주소를 할당받는다. IP주소는 기숙사 건물이라고 생각하면 된다. 포트는 기숙사 방이다. 기숙사 안에 여러개의 방이 존재하듯이 IP는 수많은 포트를 가진다. 그러니깐 포트 번호는 세부 주소로 생각하면 된다. 애플리케이션을 구분할 때도 포트 번호를 사용한다. 포트 번호는 0 ~ 65535까지 할당 가능하지만 0 ~ 1023은 잘 알려진 포트(well known port number)로 사용하지 않는 것이 좋다. 대표적인 well known port number로는 HTTP(80), HTTPS(443), FTP(20, 21) 등이 있다. HTTP, HTTPS 포트 번호는 워낙 자주 사용해서 생략이 가능하다. 혹시 접속한 도메인이 ‘http’로 시작한다면 맨 뒤에 ‘:80’을 붙여보자. 정상.......