본문 바로가기
코테/프로그래머스

문자열 뒤집기(for문에 대해)

by Slow Motion~ 2023. 2. 22.
728x90

그동안 for을 잘 못 이해하고 있었다.

for(int i = 5; i == 0; i--)

이렇게 선언하면 5,4,3,2,1,0 까지 6번을 실행하는 것으로 이해하고 있었는데 이 for문은 i==0조건 때문에 반복문이 실행되지 않는다.

 

여기서 for문의 구조를 확인해보면  다음과 같다.

for (초기값; 조건식; 증감식) {
  // 반복 수행할 코드
}

for문의 조건식은 반복을 계속할지 말지를 결정하는 역할을 한다.

 

조건식의 결과가 참(True)이면 반복이 계속되고 거짓(false)이면 반복이 종료된다.

 

따라서 for문의 조건식 i==0은 i가 0이 아니면 반복을 게속하고 i가 0이면 반복을 종료하게 된다.

 

i가 5로 초기화되었기 때문에 i==0은 처음부터 거짓이 되기 때문에 반복이 실행하지 않는 것이다.

 

그래서 이렇게 안 짜고

class Solution {
    public String solution(String my_string) {
        String answer = "";
        // 문자열의 뒤에서부터 앞으로 반복하며 answer에 문자를 추가
        for (int i = my_string.length() - 1; i >= 0; i--) {
            // i번째 인덱스의 문자를 가져와서 answer에 추가
            answer += my_string.charAt(i);
        }
        // 뒤집힌 문자열을 반환
        return answer;
    }
}

이렇게 짜서 실패했었다.

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = my_string.length() - 1; i == 0; i--) {
            answer += my_string.charAt(i);
        }
        return answer;
    }
}
  • + 여기서 charAt()메서드는 문자열의 인덱스를 입력받아 해당 위치의 문자를 반환한다. 지금 String이니까 char로 하나씩 받아야 해서 사용했다.

 

  • String으로 저장된 문자열 중에서 한 글자만 선택해서 char타입으로 변환해준다.

 

결론 : 조건식을 ~까지라는 개념으로 이해하고 있었음.

그러나 조건식은 false이면 애당초 실행되지 않으며 true일때만 실행됨

 

+ 만약 아래와 같으면 어떻게 될까

for( int i = 5; i =0; i--)

무한 루프에 빠진다.

 

이유 : 조건식에 해당하는 i=0이 계속 i를 0으로 초기화 하기 때문이다. 여기서 =는 대입 연산자

 

+ C++

#include <string>
#include <vector>

using namespace std;

string solution(string my_string) {
    string answer = "";
    for(int i = my_string.size()-1; i>=0; i--){
        answer += my_string[i];
    }
    return answer;
}

'코테 > 프로그래머스' 카테고리의 다른 글

특정 문자 제거  (0) 2023.02.22
문자 반복 출력하기  (0) 2023.02.22
각도기  (0) 2023.02.21
배열 뒤집기  (0) 2023.02.21
피자 나눠 먹기 (2)  (0) 2023.02.21

댓글