From 34f97345c5175a897f1a221bd62bd805e301325b Mon Sep 17 00:00:00 2001 From: syi07030 Date: Sat, 2 Apr 2022 20:51:36 +0900 Subject: [PATCH] =?UTF-8?q?[2=EC=A3=BC=EC=B0=A8]=203.28=20-=204.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 6148 bytes ...\270\353\271\204\355\212\270_level2.swift" | 35 ++++++++ ...\214\353\223\244\352\270\260_level2.swift" | 79 ++++++++++++++++++ ...\205\354\240\225\353\240\254_level2.swift" | 75 +++++++++++++++++ ...2104\353\270\224\353\241\235_level2.swift" | 54 ++++++++++++ 5 files changed, 243 insertions(+) create mode 100644 "\355\225\234\352\267\274\354\230\201/.DS_Store" create mode 100644 "\355\225\234\352\267\274\354\230\201/2\352\260\234\354\235\264\355\225\230\353\241\234\353\213\244\353\245\270\353\271\204\355\212\270_level2.swift" create mode 100644 "\355\225\234\352\267\274\354\230\201/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260_level2.swift" create mode 100644 "\355\225\234\352\267\274\354\230\201/\355\214\214\354\235\274\353\252\205\354\240\225\353\240\254_level2.swift" create mode 100644 "\355\225\234\352\267\274\354\230\201/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235_level2.swift" diff --git "a/\355\225\234\352\267\274\354\230\201/.DS_Store" "b/\355\225\234\352\267\274\354\230\201/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..bd0491bd24999588aa8bb4ca6ae3376fa6b02d34 GIT binary patch literal 6148 zcmeHKO-oxr6g|_#s*SX{f*_UBw{a`zR;o{li!KCFy0*ro5{L#&qquuN#2+98d}}`z zp?|DBcV>{6q=t4QrQ8d5&b*nqXYL%BnKuC3cCWDtQ~}J;70Yi}{Km9jeav3P7VUJ( zAw8LwBbkzxl*UF|gDGGN{A&v6-u;L*fz+i^+`oPwccm}WY^_QchiIdT3wj%CSV0$; zXyF^ae{Oe<>+MdROnQtA=s$i&V|@XqxWX|yXfQS*UrTOemi$`lKhNZD8GT=1n#DeL zu!S0Si7Vu7jLf~qh>b$T2hP*u8X)If-H~5mi7jvCjNatz#Z|3N$YptidBHR1B3`$1 z$^V$?noOUDa;(USJTkYYIO)njUNh6&=X%e~dqd2Vl)oeMdV%@9ydz(qnVxyhzLfZ# z{}tyKat;cdOI&f#F(;?yJ;%HsdFG#tXfPpDw@KEA0xLhwUR(j**=jSDfL59UrhqB% zq=23e30*Obm<9Al2MhlMAePzejdlGA(3m7*8ZisV9-0fG#1QJ@6T^jYwkL618ZiqP z!r|iM!^N3he4#i$JNXko94-xLr72(v3@Z@d=vBS{cbdt?Vz^J zCB?gSY;k(mCiJg#H651)^dT(bb?hs86))1gu`kgIF^!l7WDCuH1iTDZm;x`Vz%QpS Bw_^YR literal 0 HcmV?d00001 diff --git "a/\355\225\234\352\267\274\354\230\201/2\352\260\234\354\235\264\355\225\230\353\241\234\353\213\244\353\245\270\353\271\204\355\212\270_level2.swift" "b/\355\225\234\352\267\274\354\230\201/2\352\260\234\354\235\264\355\225\230\353\241\234\353\213\244\353\245\270\353\271\204\355\212\270_level2.swift" new file mode 100644 index 0000000..83cac15 --- /dev/null +++ "b/\355\225\234\352\267\274\354\230\201/2\352\260\234\354\235\264\355\225\230\353\241\234\353\213\244\353\245\270\353\271\204\355\212\270_level2.swift" @@ -0,0 +1,35 @@ +//220331 +//프로그래머스 [level2] 2개 이하로 다른 비트 문제 +//https://programmers.co.kr/learn/courses/30/lessons/77885 + +import Foundation + +func solution(_ numbers:[Int64]) -> [Int64] { + var answer = [Int64]() + for n in numbers { + var bit = String(Int(n),radix:2).map{String($0)} + if bit.last! == "0" { + bit[bit.count-1] = "1" + } else if let zeroIndex = bit.lastIndex(of:"0"){ + bit[zeroIndex] = "1" + bit[zeroIndex+1] = "0" + } else { + bit.insert("1",at:0) + bit[1] = "0" + } + answer += [Int64(bit.joined(separator:""),radix:2)!] + } + return answer +} + +/* +다른 사람 풀이(이렇게 비트 연산 이용해서) + +func solution(_ numbers: [Int64]) -> [Int64] { + return numbers.map(f) +} + +func f(_ number: Int64) -> Int64 { + return (number | ~number & (number + 1)) & ~((~number & (number + 1)) >> 1) +} +*/ \ No newline at end of file diff --git "a/\355\225\234\352\267\274\354\230\201/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260_level2.swift" "b/\355\225\234\352\267\274\354\230\201/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260_level2.swift" new file mode 100644 index 0000000..1318444 --- /dev/null +++ "b/\355\225\234\352\267\274\354\230\201/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260_level2.swift" @@ -0,0 +1,79 @@ +//220329 +//프로그래머스 [level2] 큰 수 만들기 문제 +//https://programmers.co.kr/learn/courses/30/lessons/42883 + +//최종! +import Foundation + +func solution(_ number:String, _ k:Int) -> String { + let nArr = number.map{String($0)} + var answer = [String]() //stack + var erase = 0 + var i = 0 + while(k>erase){ + if i == nArr.count{ + answer.removeLast() + erase += 1 + }else if answer.count == 0 || answer.last! >= nArr[i]{ + answer += [nArr[i]] + i += 1 + } else if answer.last! < nArr[i]{ + answer.removeLast() + erase += 1 + } + } + answer += Array(nArr[i...]) + return answer.joined(separator:"") +} + + +/* +func solution(_ number:String, _ k:Int) -> String { + var nArr = number.map{String($0)} + var erase = 0 + var i = 0 + while(k>erase){ + if i == nArr.count-1 { + nArr.removeLast() + erase += 1 + }else if nArr[i] < nArr[i+1] { + nArr.remove(at:i) + erase += 1 + i = 0 + } else{ + i += 1 + } + } + return nArr.joined(separator:"") +}*/ +//654321 k=1 65432 +//654321 k=5 6 +//11111117 k=5 + +/*다른 사람 풀이 +import Foundation + +func solution(_ number:String, _ k:Int) -> String { + let numbers = number.compactMap{ Int(String($0))} + + var sub: [Int] = [] + + var k = k + + for (i,e) in numbers.enumerated() { + while k>0, sub.isEmpty == false, sub.last! < e { + k-=1 + sub.removeLast() + } + + if k == 0 { + sub.append(contentsOf: numbers[i...]) + break + } else { + sub.append(e) + } + } + + return sub[..<(sub.count-k)].map {String($0)}.joined() +} +*/ \ No newline at end of file diff --git "a/\355\225\234\352\267\274\354\230\201/\355\214\214\354\235\274\353\252\205\354\240\225\353\240\254_level2.swift" "b/\355\225\234\352\267\274\354\230\201/\355\214\214\354\235\274\353\252\205\354\240\225\353\240\254_level2.swift" new file mode 100644 index 0000000..2ac0213 --- /dev/null +++ "b/\355\225\234\352\267\274\354\230\201/\355\214\214\354\235\274\353\252\205\354\240\225\353\240\254_level2.swift" @@ -0,0 +1,75 @@ +//220331 +//프로그래머스 [level2] 파일명 정렬 문제 +//https://programmers.co.kr/learn/courses/30/lessons/17686 + +//파일명이 숫자로 끝날경우 number 부분 주의 필요 +func solution(_ files:[String]) -> [String] { + var arr: Array = [] + + for f in files { + let lowerArray = f.map{$0.lowercased()} + let nums = lowerArray.filter{Character($0).isNumber == true} + let numberFirstIndex = lowerArray.firstIndex(of:nums[0])! + let head = Array(lowerArray[.. { return "0"..."9" } + var head: String{ + return self.prefix { numeric.contains($0) == false }.uppercased() + } + var number: Int { + return Int( self.drop { numeric.contains($0) == false} + .prefix { numeric.contains($0) == true })! + } +} + +func solution(_ files:[String]) -> [String] { + + return files.enumerated().sorted { (lhs, rhs) in + let l = lhs.element + let r = rhs.element + if l.head != r.head { return l.head < r.head} + if l.number != r.number { return l.number < r.number} + return lhs.offset < rhs.offset + + }.map{ $0.element } +} +*/ \ No newline at end of file diff --git "a/\355\225\234\352\267\274\354\230\201/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235_level2.swift" "b/\355\225\234\352\267\274\354\230\201/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235_level2.swift" new file mode 100644 index 0000000..c131d79 --- /dev/null +++ "b/\355\225\234\352\267\274\354\230\201/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235_level2.swift" @@ -0,0 +1,54 @@ +//220328 +//프로그래머스 [level2] 프렌즈4블록 문제 +//https://programmers.co.kr/learn/courses/30/lessons/17679 + +func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int { + var pre_answer = 0 + var answer = 0 + var answerArr = [[Int]]() + var arr = Array(repeating:Array(repeating:"0",count:n),count:m) + for (i,b) in board.enumerated(){ + arr[i] = b.map{String($0)} + } + + repeat{ + pre_answer = answer + //행,열 탐색해서 같은 거 있으면 answerArr에 좌표 넣기 + for i in stride(from:0,to:m-1,by:1){ //행 + for j in stride(from:0,to:n-1,by:1){ //열 + if arr[i][j] == "0" {continue} + if arr[i][j] == arr[i+1][j] && arr[i][j] == arr[i][j+1] && arr[i][j] == arr[i+1][j+1]{ + answerArr = answerArr + [[i,j]]+[[i+1,j]]+[[i,j+1]]+[[i+1,j+1]] + } + } + } + + //answerArr 중복 없애기 + answerArr = Array(Set(answerArr)) + + //answerArr에 있는 좌표 모두 0 만들기 + answer += answerArr.count + for i in answerArr{ + arr[i[0]][i[1]] = "0" + } + + //arr 배열 재배치 + for j in stride(from:0,to:n,by:1){ //열 + var first = 0 //블록이 내려와야할 행 위치 + if arr[m-1][j] == "0" {first = m-1} + for i in stride(from:m-2,through:0,by:-1){ //행 + if arr[i][j] == "0"{ + if i>first {first = i } + } + else if arr[i+1][j] == "0"{ + arr[first][j] = arr[i][j] + arr[i][j] = "0" + first -= 1 + } + } + } + //answerArr 다시 빈 배열 만들기 + answerArr = [[Int]]() + } while(pre_answer