[Swift] 구름 - 1차원 뿌요뿌요

2024. 7. 3. 22:45·Algorithm/Swift

 

문제 해결 과정

처음에는 앞, 뒤를 비교해서 같은 값이 나올때 start, 다른 값이 나올때 end를 저장해 해당 부분을 빼주는 식으로 구현했다.

이렇게 하니깐 테스트 케이스는 통과했는데 제출에서 몇 개 통과가 안됐다.

알고보니 스택과 관련된 문제였고, 스택을 통해 구현해보기로 했다.

우선 스택을 하나 생성하고, block을 하나씩 집어넣으면서

stack의 마지막 block과 현재 block이 같지 않을 때 마지막 block의 count가 m보다 크다면 마지막 block 삭제

stack의 마지막 block과 현재 block이 같다면 stack의 마지막 block의 Count += 1, 같지 않으면 새로 append 해주는 방식으로 구현했다.

중간에 이걸 반대로 생각한건 아닌데 아무튼 반대로 해도 될 줄 알아서 좀 막혔었다.

 

나의 풀이

func puyoPuyo(_ blocks: [String]) -> String {
	var stack = [(String, Int)]()
	for block in blocks {
		// stack의 마지막 block과 현재 block이 같지 않을 때
		if let last = stack.last, last.0 != block {
			// 마지막 block의 count가 m보다 크다면
			if let last = stack.last, last.1 >= m {
				// 마지막 block 삭제
				stack.removeLast()
			}
		}
		// stack의 마지막 block과 현재 block이 같다면
		if let last = stack.last, last.0 == block {
			// stack의 마지막 block의 Count += 1
			stack[stack.count - 1].1 += 1
		} else {
			// 같지 않으면 새로 append
			stack.append((block, 1))		
		}
	}
	
	// 마지막 남은 값이 m 이상이라면 삭제
	for (_, count) in stack {
		if count >= m {
			stack.removeLast()
		}
	}
	
	return stack.map { String(repeating: $0.0, count: $0.1) }.joined()
}

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let (n, m) = (input[0], input[1])
let blocks = readLine()!.map { String($0) }
let result = puyoPuyo(blocks)
print(result.count == 0 ? "CLEAR!" : result)

 

blocks을 다 돌고 나왔을때 남아있는 값이 m 이상이면 삭제해줬다.

 

return 할때 block을 count만큼 반복해서 배열로 만들어서 joined해줬다.

 

마지막 print할때 빈 배열이라면 CLEAR! 아니라면 result값을 그대로 출력해줬다.

'Algorithm > Swift' 카테고리의 다른 글

[Swift] 백준 12933 - 오리  (0) 2024.06.20
[Swift] 프로그래머스 - 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기  (0) 2024.06.19
'Algorithm/Swift' 카테고리의 다른 글
  • [Swift] 백준 12933 - 오리
  • [Swift] 프로그래머스 - 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
🥭Mango
🥭Mango
  • 🥭Mango
    AppleMango🥭
    🥭Mango
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • SwiftUI
        • RxSwift
      • Algorithm
        • C
        • Python
        • Swift
      • Computer Science
        • 컴퓨터 네트워크
        • OS
      • ...
      • 개발 타임캡슐
        • Python
        • Flutter
        • Android
        • Kotlin
        • Java
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IOS
    파이썬 6118
    14503 로봇청소기
    파이썬 정렬
    6118
    스택
    14503 파이썬
    swiftUI tabview
    MapMarker
    SwiftUI
    swiftUI Gradients
    Swift Hello World!
    백준 소수
    1613 역사
    파이썬 토마토
    Custom Map Marker
    SwiftUI Apple Login
    파이썬 1459
    백준 토마토
    파이썬
    코틀린 상속
    파이썬 14503
    토마토
    1613 파이썬
    1차원 뿌요뿌요
    코틀린
    typing animation
    역사 파이썬
    Code Base
    Apple Login
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
🥭Mango
[Swift] 구름 - 1차원 뿌요뿌요
상단으로

티스토리툴바