본문 바로가기

C17

[Error,C++]Expression must be a modifiable lvalue 해결법 코딩하다 "Expression must be a modifiable lvalue" 오류가 가끔 뜬다. 직역하면 "표현식은 수정할 수 있는 lvaue이어야만 한다."라는 뜻이다. 여기까지 찾아왔다면 무슨 소리인가??? 무엇을 잘 못 썼다는 말인 거 같은데 난 잘 못 쓴 게 없다는 분들이 대다수라 생각한다. 하지만 결론적으로 잘못 쓰셨다. 표현식을 하나하나 찬찬히 뜯어보시길 바란다. 저 또한 같은 생각을 했고 다시 실수하지 않기 위해 이글을 쓴다.. 그래도 여기서 바로 알고싶다는 분들을 위해 stackoverflow에 있는 사례를 하나 들겠다. int M = 3; int C = 5; int match = 3; for ( int k =0; k < C; k ++ ) { match --; if ( match ==.. 2020. 5. 25.
[C++,구현,BFS,DFS] 백준 15686번 치킨 배달 문제풀이 문제링크 백준 15686번 치킨 배달 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 www.acmicpc.net DFS,BFS를 모두 쓴 조금은 힘든? 문제이다. 최대 M개의 치킨집을 고르는 건 DFS, 치킨집을 골라 최소거리를 구하는 건 BFS로 구현하였다. 밑에 코드에 나.. 2019. 5. 25.
[C++,구현] 백준 16234번 인구 이동 문제풀이 문제 링크 백준 16234번 인구 이동 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 www.acmicpc.net 문제를 풀고 나서 생각해보니 연합을 만들 때 DFS/BFS 어느 방법으로 해도 상관없을것 같다. 나는 DFS를 사용하였다. side case에 걸리지 않고 한번에.. 2019. 5. 24.
[C++,구현] 백준 17143번 낚시왕 문제풀이 문제 링크 백준 17143번 낚시왕 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하 www.acmicpc.net 코테에서 2문제 "완벽히" 풀 자신이 없다면 선택적으로 한문제 완벽히 맞추고 넘어가야 한다! 명심 또 명심! 1 2 3 4 5 6 7 8 9 10 11 12 13 14.. 2019. 4. 28.
[C++,완탐] 백준 14500번 테트로미노 문제풀이 문제 링크 백준 14500번 테트로미노 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net 완전탐색 문제이다. DFS 재귀방식으로 풀었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24.. 2019. 3. 30.
[C++,구현] 백준 14891번 톱니바퀴 문제풀이 문제 링크 백준 14891번 톱니바퀴 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려 www.acmicpc.net 구현문제이다. 간단하다면 간단할 수 있는 문제인데 오류찾는거까지 순수하게 2시간정도 걸린거 같다ㅜ 문제를 많이 풀어서 보다 빠르고 능숙하게 풀도록 해야겠다. 1 2.. 2019. 3. 27.
[C++,구현] 백준 1764번 듣보잡 문제풀이, 배열,vector,map 속도비교 문제링크 백준 1764번 듣보잡 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. www.acmicpc.net 간단한 문제열 처리문제를 가지고 흔히 알고리즘에서 사용하는 단순 배열, STL vector, STL map을 써서 다양한 방법으로 문제를 풀어보고 속도차이를 비교해보려 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #in.. 2019. 3. 26.
[C++,구현] 백준 14499번 주사위 굴리기 문제풀이 문제링크 백준 14499번 주사위 굴리기 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마 www.acmicpc.net 구현문제를 풀어보았다. 구현문제가 익숙치 않아 코드도 길고 복잡하게 짜버렸다ㅜㅜ 다른분들의 코드를 보면서 최적화 시켜야겠다. 1 2 3 4 5 6 7 8 .. 2019. 3. 14.
[C,C++] 지역변수와 전역변수 특징,백준 1463번 1로 만들기 풀이 문제 링크 백준 1463번 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 1로 만들기는 지난번에 풀이한 적이 있지만 한번 복습하는겸 다시 풀기로 했다. C언어 문법으로 갈아타고 여기저기 주운 지식을 이용해 다시 코드를 작성하니 확실히 깔끔해졌다. 또한 유명코더분들이 배열을 만들때 전역변수로 만드는 경우가 많았는데 오늘 이문제를 다시 풀어보며 차이점을 포스팅하기로 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 #include int n,dp[1000001]; int main(){ scanf("%d",&n); for(int i=0;idp[i/3]+1?dp[i]=dp[i/3]+1:dp[i]; dp[i.. 2019. 3. 11.
[C++,DP] 백준 2294번 동전2 문제풀이 문제링크 백준 2294번 동전2 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다. www.acmicpc.net DP문제를 하나 더 풀어보았다. 어려운 듯하면서 쉬운 듯 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include #include #include #include using namespace std; int main(){ int N,K; cin.. 2019. 3. 8.
[C++,DP] 백준 9465번 스티커 문제풀이 문제 링크 백준 9465번 스티커 9465번: 스티커 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다. 모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점 www.acmicpc.net "1로 만들기"와 같은 유형의 DP 문제이다. 처음에 in-place로 알고리즘을 짜려다 꼬여서 자꾸 오답이 나오길래 각설하고 그냥 따로 배열을 하나 더 만들어서 짜서 A.. 2019. 3. 4.
[C++] 백준 2309번 일곱난장이 문제풀이 문제 링크 백준 2309번 일곱난장이 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net DP관련 문제인 줄 알았더니 알고보니 짐승공격 문제였다. ㅎㅎㅎ 항상 9개가 입력되고 7개의 답안이 출력된다는 점에 착안해서 9개 중에 골라낼 가짓수 2개를 모두 하나하나 대입하여 제외하고 나머지 7개의 합이 100이 되는지 판단하는 문제이다. vector와 sort함수를 이용하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 .. 2019. 2. 14.