목록분류 전체보기 (96)
JLOG
#include #include using namespace std; /* 부호 https://www.acmicpc.net/problem/1247 if 문에서 overflow 발생 시 undefined behavior에 해당되 자동으로 false 처리 LONG_MAX, LONG_MIN 이용해서 overflow를 안 일으키고 검사하는 것이 포인트 https://www.acmicpc.net/board/view/56858 */ int main(void){ long long result=0, overflow=0; int n; for (int test_case=0; test_case>n; result = 0; overflow = 0; for (int i=0; i < n; i++){ long long tmp; st..
랜선 자르기 시간 제한 메모리 제한 2 초 128 MB 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그..
스택 수열 시간 제한메모리 제한 제출 정답 맞은 사람정답 비율 2 초 128 MB 56234 19274 13796 34.094% 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을..
list = [1, 2, 3, 4, 5, 6, 7, 8] # 짝수 index만 - (0, 2, 4, 6 ...) >>> list[0::2] [1, 3, 5, 7] # 홀수 index - (1, 3, 5, 7 ...) >>> list[1::2] [2, 4, 6, 8] # 4로 나눈 후, 첫번째 index >>> list[0::4] [1, 5] # 4로 나눈 후,두번째 index >>> list[1::4] [2, 6] # 4로 나눈 후, 3번째 index >>> list[2::4] [3, 7] list[idx::n] n : list를 몇개로 나눌 것인지 idx : 나눈 후에 원하는 인덱스 (idx < n) 맨 위에 예시들을 보면 쉬우니 예시를 보고 참고하면 좋겠다! 코드를 수정하던 중 짝수와 홀수에 해당하는..
체스판 다시 칠하기 시간 제한 : 2초 메모리 제한 : 128 MB 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M*N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8*8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8*8 크기의 체스판으로 잘..
요즘 1일 1알고리즘 풀이를 진행하고 있다. 항상 git add, commit, push를 치는 것이 번거로워 단축키를 하나치면 위 과정들을 수행하는 방법을 찾았다. 리눅스 여러 명령어 한줄로 작성 - ';', '&&' 이용 linux에서 ';'를 사용하면 한 줄에 여러 명령어를 실행할 수 있다. ';'은 줄 구분하기 위한 기호로서 ';'를 중심으로 하나씩 명령어를 실행한다. '&&'는 전의 명령어가 성공한 경우 다음 명령어를 실행한다. 원하는 조건에 맞게 alias를 구성해서 사용할 수 있다. 아래는 github push를 자동으로 실행하기 위해 만든 alias이다. ~/.bashrc 또는 ~/.zshrc 파일에 입력해야 한다. 만약 alias 설정하는 방법을 모른다면 alias 설정하기를 참고하자 a..
def makedir(filepath) : if not os.path.exists(filepath): os.makedirs(filepath) print(f"MAKE DIR at {filepath}") makedir(filepath)
백준의 1076번 문제인 저항을 풀었다. https://www.acmicpc.net/problem/1076 1076번: 저항 첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다. www.acmicpc.net 문제 자체의 난이도는 높지 않고, hash를 이용하여 풀었다. 예제에 대해서는 답이 나오는 것을 확인할 수 있었는데, 제출해보니 문제가 틀렸다. 그 이유는 white, white, white의 결과인 9.9e+10처럼 큰 수일 때 자동으로 지수 표기법으로 표현 된다는 것이 문제였다. 그래서 해결책을 찾아보니 1) printf를 사용 printf("%lld",(total[0]*10+total[1])*(long long)po..
C++를 공부하면서, C에 대한 개념들이 부족하다고 생각했다. 특히 배열을 함수에 넘겨주고 사용할 때, 포인터 개념이 헷갈려서 포인터 개념을 먼저 정리해보기로 했다. 'C언어 코딩 도장'의 사이트를 참고하여 공부했고 이 글을 정리했다. C언어 코딩 도장의 설명이 자세하게 잘 되있기 때문에 여기서 공부하는 것을 추천한다. 이 글은 개인적으로 기록하기 위한 용도로 정리되었다. 포인터 사용하기 : https://dojang.io/mod/page/view.php?id=274 포인터 변수 선언하기 : https://dojang.io/mod/page/view.php?id=275 역참조 연산자 사용하기 : https://dojang.io/mod/page/view.php?id=276 변수 메모리 주소 구하기 변수의 메..
알고리즘 문제를 풀면서 cout과 cin보다 printf과 scanf의 속도가 더 빠르다는 것을 알았다. cout, cin를 사용할 때 속도를 높이려면 아래와 같은 구문을 추가해주면 된다고 한다. // c와 c++ 입출력의 동기화를 사용하지 않음 ios::sync_with_stdio(false); // cin과 cout의 묶음을 풀어줌 cin.tie(NULL); cout.tie(NULL); 구문 설명 ios::sync_with_stdio(false); c++은 c의 입출력함수(printf, scanf)를 사용할 수 있다. 이 때 iostream과 stdio의 버퍼를 모두 사용하여 딜레이가 발생한다. c 입출력 동기화를 비활성화시켜, c++만의 독립적인 버퍼를 사용해 실행 속도를 개선시킨다. 멀티 쓰레드 ..