연습장
40. 문자열 여러 번 뒤집기 본문
Q . 문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 영소문자로만 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000
queries의 원소는 [s, e]의 형태로 0 ≤ s ≤ e < my_string의 길이를 만족합니다.
1 ≤ queries의 길이 ≤ 1,000
my_string 문자열을 대상으로 queries의 원소에 [s , e] 의 값 에 따라서 문자를 뒤집으면 된다.
간단한 예시를 보면
ex) my_string = "abcde"
queries = [1,3] 일경우
result = "adcbe" 가 된다 .
다시 문제로 와서 queries 의 원소만큼 위의 입출력 예시는 4번 반복하며
일반화하면 4번이라는것은 즉 배열의 모든 원소에 대해 실행한다고 볼 수 있다.
단순 for 문으로 풀어보자면
queries = [[2, 3]] 에대해
my_string[2] 와 my_string[3] 의 자리를 바꿔준다고 볼 수 있다.
그렇다면 queries = [[2, 3], [0, 7], [5, 9], [6, 10]] 에 대해서는 어떻게 될까
i가 1일때는
queries = [0,7] 이며
my_string[0] <--> my_string[7]
my_string[1] <--> my_string[6]
my_string[2] <--> my_string[5]
my_string[3] <--> my_string[4]
총 4번 자리를 바꿔야한다.
s (start) 는 1씩 커지고
e (end) 는 1씩 작아지는것을 알 수있다.
그리고 s가 e 보다 크면 종료가 된다.
i가 2일때는
queries = [5,9] 이며 한번더 적어보면
my_string[5] <--> my_string[9]
my_string[6] <--> my_string[8]
my_string[7] <--> my_string[7]
s 가 1씩 증가 , e 는 1씩 감소
s == e 일때 종료
총 2가지의 경우가 있는데 하나로 줄여보자면
받아온 [s, e ] 에 대해서
s >= e 일때가 종료 조건이며 -> s < e 이면 바꿔줘야한다.
반복하는경우 s++ , e-- 의 변화를 가진다.
따라서 횟수는 잘모르겠지만, 조건에 따라 반복하는 경우 -> while 문을 사용
my_string = "rermgorpsam" 으로 주어진 input 에 대해서
my_list = ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'e', 'r', 's'] 로 잘 나오는것이 확인된다.
코드 줄여보기
queries 를 다 돌면서 진행한다. -> 배열을 모두 순회 한다. -> forEach 를 사용
forEach 안에서 while 문을 도는 구조로 작성하였다.
고찰.
각각 프로그래머스 사이트에 정답을 제출했더니 다음과 같은 결과를 가진다.
용량은 비슷한데 속도의 차이를 가진다. 물론 인터넷 상태에 따라 달라질 수 있겠지만.
인터넷에 검색해본 결과
for loop > reduce > foreach > map 순으로 속도가 빠르다고 한다.
for 문이 줄수가 더 길지만, forEach 보다 빠른 속도가 난다는 점이 흥미로웠다.
'프로그래머스 > 0단계' 카테고리의 다른 글
42. 부분 문자열 이어 붙여 문자열 만들기 (0) | 2023.06.25 |
---|---|
41. 배열 만들기 5 (0) | 2023.06.25 |
39. 9로 나눈 나머지 (0) | 2023.06.24 |
38. 글자 이어 붙여 문자열 만들기 (0) | 2023.06.24 |
37. 주사위 게임 3 (0) | 2023.06.24 |