


향상된 for문
향상된 for문
[C, C++, Java 등 언어 공통] 반복문 상세설명!(for, do while, 향상된 for문 사용법, 차이점 및 실행 순서) (tistory.com)
[자바 JAVA] 이차원 배열,int 2차원 배열, 향상된 for문 (tistory.com)
for( 가져올 타입 변수명 : 가져올 주소){}
ex)
int moves[10] = { }
for (int i : moves){ }
벡터, 2차원 벡터
vector 클래쓰에서 사용할 수 있는 함수에 대해 공부합시다!
C++ STL> Vector Container 에 대해 알아보자.(2차원 vector 사용) (tistory.com)
vector<int> v;
v.at(index); // index 번째 원소를 리턴한다. v[index] 보다는 느리지만 범위를 점검한다.
v.front(); //첫 번째 원소를 리턴한다
v.back(); // 마지막 원소를 리턴한다.
v.clear(); // 모든 원소를 제거한다. 그러나 원소만 제거하고 메모리에 vector는 그대로 있다.
벡터의 삽입/삭제
v.push_back(1); // 마지막 원소 뒤에 원소 1을 삽입한다.
v.insert(2, 3); // 2번째 위치에서 3의 값을 삽입하고 삽입한 곳의 iterator를 반환한다.
v.pop_back(); // 마지막 원소를 제거한다.

이 정도만 처음에 구현하고 돌려보니 error가 발생함. 내가 요놈 잘 알지. 저저번 문제인가에서 인덱스 범위 잘못 설정했다고 날 괴롭혔던 놈
그래서 코드를 이렇게만 cout문을 적절히 넣어놓고 몇개 주석처리를 한 후 다시 돌리니 이렇게 됨

뭐지..아무리 생각해도 잘 됐는데 moves의 첫번째 원소가 돌아갈때 왜 0 - 0 - 4 - 4 로 찍히는 걸까.. board[0][1], board[1][1], board[2][1], board[3][1]로 while문을 돌아서 1: 0 - 0 - 0 - 4 가 찍히길 기대했는데 1: 0 - 0 - 4 - 4 다.
와 바보. j++ 한 후에 출력문 작성했어 아놔.. 오키 이런
와 혹시나해서

이렇게 바꿨더니 에러 안뜸ㅠㅠ 접근을 할 수 없었구나... 오키..
와 근데 또 실행하니까 또 같은 에러가 뜸. 그래서 저것도 아니라면 내가 벡터를 사용하는 방법이 틀렸구나 싶어서 포스팅들을 찾아봤는데 진짜 뭔지 모르겠다. 뭐지?
[C++] Vector (벡터) : 네이버 블로그 (naver.com)

b[j][i-1]을 bucket[] 에 push_back을 해줬으니 인형을 뽑아간 자리가 비게 해줘야하잖아 그래서 b[j][i-1] = 0을 해주려던 건데 이것만 하면 위 segmentation fault(core dumped) error가 뜬다는 것임.
그래서 j와 i-1을 확인하려고 cout문을 써줬고, 인형뽑기 2차원 배열까지 출력해줌.
이렇게 문제의 b[j][i-1] = 0 을 주석처리 해주고, 첫번째 뽑기에서 b[3][0] = 0 을 직접 하드코딩을 해줬더니 저건 실행이 잘됨.
따라서 인덱스 범위를 잘못 접근하게 한게 아니고
j=3, i-1=0인데
b[3][0]] = 0 은 실행이 잘되고,
b[j][i-1] = 0은 core dumped 문제가 발생하는 것임
(ㅋㅋㅋㅋ)


[오류] signal: segmentation fault (core dumped) — JOFTWARE
내가 아는...내용이였구요. 잘못된 메모리 참조 때문에 발생. 즉, 건드리지 말아야할 곳을 건드려서 발생
근데 찾아보니까 죄다 이 내용밖에 없어서 다른 원인은 아닐 것 같다는 생각이 듦
그러다가 혹시 저기서 에러가 난게 아니라 for문을 돌다가 어느 순간에 이상한 곳을 참조한 것은 아닐까...............?
그래서 이번에는 bucket에 원소를 추가하고 잘들어갔겠거니 하고 출력은 안해봤었는데 출력해봤더니 잘 들어가고 있었음 이게 아닌데..


그렇다면 이것도 아니고.. 다시 한번 에러에 대해 찾아봄
아무리 생각해도 잘 j와 i에 들어갔는데 왜 안됐을까....하다가 발견됨 진짜 이거구나..... 바..바카야로

진짜 내 자신 바카,,,야로
1을 3번 접근해서 인형이 다 비었는데 그 뒤에까지 접근을 해서 쓰레기를 읽었던 것. 쓰레기를 읽고 또 0을 대입하려고 했으니 core dumped라고 컴퓨터가 성을 내신거였음. 안된다고 여기는. ㅋㅋㅋㅋㅋ 재밌다 진짜
역시 컴퓨터는 거짓말 안해......^__ㅠ
2차원 벡터의 열/행 크기 구하는 법
size() 이용
2차원 "벡터"의 열/행의 크기를 구하려면
arr.size()를 이용하면 됨!
열을 구하기 위해선 arr.size()를 하면 되고
행을 구하기 위해선 arr[0].size()를 하면된다.
C++ vector<vector<int> > 2차원 벡터의 크기 (tistory.com)
그렇게 고민고민고민을 하다가 벡터를 잘못사용한것도 아니고, core dumped도 이제 안뜨는데 출력문이 너무 길단다. b[j][i-1] = 0 만 넣으려고 하면 돌아가지 않는..
그래서 다 아니고 일단 while문을 한번 바꿔볼까하고 for문으로 바꿔봄. 그랬더니 되는거;;;;;;;;;;;;;;; 일주일 동안 똥 싸다가 쌌는데 염소똥처럼 손톱만한 똥 싼 기분이였음 왜냐면 원래 코드에서 왜 그랬는지 해결이 안됐어.. while문 잘 안쓰는데 랜만에 써봤는데 뭐가 문제였을까 아직도 모르겠다. 사람은 역시 한결같아야해
그래서 제 문제의 코드를 올립니다^^

왼 : 주석처리 x / 오 : 주석 처리 o
그리고 저 while문을 for문으로 바꾼 것은
이제 다시 문제로 돌아가서 bucket에서 동일한 원소를 지워주고 answer++ 시켜주는 코드만 완성시켜볼게요..
그렇게 마무리시킨 나의 코드는.. for문안에 if문 하나만 추가해줌

다른 사람의 풀이 한개만 살펴볼게유

#include <stack> 해서 스택 함수들을 이용하심.
네.. 그렇게 역대급 블랙홀에 걸려서 역대급 힘들었던 문제가 드디어 끝이 났네요
난 문제를 읽으면 생각을 거의 안하고 일단 코드를 써내려가면서 생각함. 이걸 고쳐야할거같다.. 일단 완전 꼼꼼히 문제를 읽고, 적어도 1분은 어케어케 할지 생각하고 풀기!!! 이걸 담부턴 해볼게요. 넴. 안녕히 계세요..
'‡ CODING TEST STUDY ‡ > º 프로그래머스' 카테고리의 다른 글
프로그래머스 [Lv] | 소수 만들기 (0) | 2023.07.27 |
---|---|
프로그래머스 [Lv1] | 신고 결과 받기 (0) | 2023.07.27 |
프로그래머스 [Lv1] | 키패드 누르기 (0) | 2023.07.27 |
코딩 테스트 연습 [Lv1] | 숫자 문자열과 영단어 (0) | 2023.07.27 |
코딩 테스트 연습 [Lv1] | 신규 아이디 추천 (0) | 2023.07.27 |