Lvalue와 Rvalue C++에서 lvalue는 특정 메모리 위치를 가리킨다. 반면 rvalue는 아무데도 가리키지 않는다. 일반적으로 rvalue는 일시적이고 수명이 짧지만 lvalue는 변수로 존재하기 때문에 수명이 더 길다. int x = 666; // ok 여기서 666은 rvalue이다. 숫자(엄밀히 말하자면 리터럴 상수)는 프로그램 실행 중의 임시 레지스터를 제외하면 특정 메모리 주소가 없다. 666은 변수 x에 할당된다. 변수는 특정 메모리 주소가 있으며 따라서 lvalue이다. C++에서 할당 연산자(assignment operation)인 =는 왼쪽 피연산자(left operand)로 lvalue가 필요하다. 그리고 lvalue인 x를 가지고 다음과 같은 것을 할 수 있다. int *..
프로그래밍
문제 https://www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net 풀이 방법 2206번 벽 부수고 이동하기와 비슷한 문제다. 이 문제에서는 벽을 K개만큼 부술 수 있는게 차이점이다. 비슷하게 풀되 벽을 1개까지 부쉈던 부분을 K개까지 부술 수 있게 처리하면 된다. 코드 #include #include #include #include #include #include using namespace std; int dy[] = ..
문제 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크 www.acmicpc.net 풀이 방법 (0,0)부터 시작해서 (10,10)까지 종이에 1이 적혀있으면 큰 색종이부터 작은 색종이까지 붙일 수 있는 종이를 다 붙혔다 뗐다하면서(백트래킹) 깊이 우선 탐색을 한다. 2580번 스도쿠와 비슷할 수도 있는 문제. 코드 #include #include #include using namespace std; int answer = 0x6FFFFFFF; void dfs(ve..
문제 https://www.acmicpc.net/problem/1039 1039번: 교환 첫째 줄에 정수 N과 K가 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, K는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 방법 문제에 설명되어있는 것처럼 i번 위치와 j번 위치를 바꾸는 연산을 K번 했을 때 나오는 수들의 최댓값을 구하면 된다. 헷갈릴 수 있는데, 탐색 과정 중의 최댓값을 구하는 게 아니라 탐색을 K번한 후의 최댓값을 구하는 것이다. 예를 들면 예제 입력2의 132 3에서 연산을 2번 했을 때의 수는 132, 213, 321이고 이 중 최댓값은 321이지만 연산을 3번 했을 때는 123, 231, 312로 최댓값은 312가 나온다. 그리고 132->123 , ..