Skip to content

Commit

Permalink
[2주차] 3.28 - 4.3
Browse files Browse the repository at this point in the history
  • Loading branch information
syi07030 committed Apr 2, 2022
1 parent 6c2b484 commit 34f9734
Show file tree
Hide file tree
Showing 5 changed files with 243 additions and 0 deletions.
Binary file added 한근영/.DS_Store
Binary file not shown.
35 changes: 35 additions & 0 deletions 한근영/2개이하로다른비트_level2.swift
Original file line number Diff line number Diff line change
@@ -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)
}
*/
79 changes: 79 additions & 0 deletions 한근영/큰수만들기_level2.swift
Original file line number Diff line number Diff line change
@@ -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()
}
*/
75 changes: 75 additions & 0 deletions 한근영/파일명정렬_level2.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//220331
//프로그래머스 [level2] 파일명 정렬 문제
//https://programmers.co.kr/learn/courses/30/lessons/17686

//파일명이 숫자로 끝날경우 number 부분 주의 필요
func solution(_ files:[String]) -> [String] {
var arr: Array<fileStruct> = []

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[..<numberFirstIndex]).joined(separator:"")
//print(head)
let characters = Array(lowerArray[numberFirstIndex..<lowerArray.endIndex]).filter{Character($0).isNumber == false}
//print(characters)
var number: Int
if characters.count == 0 {
number = Int(Array(lowerArray[numberFirstIndex..<lowerArray.endIndex]).joined(separator:""))!
} else{
let numberLastIndex = Array(lowerArray[numberFirstIndex..<lowerArray.endIndex]).firstIndex(of:characters[0])!
//print(numberLastIndex)
number = Int(Array(lowerArray[numberFirstIndex..<numberFirstIndex+numberLastIndex]).joined(separator:""))!
}

let s = fileStruct(name:f,Head: head ,Number:number)
arr += [s]
}

let newArr = arr.sorted(by:{$0.Number < $1.Number})
let newArr2 = newArr.sorted(by: {$0.Head < $1.Head})

let answer = newArr2.map {$0.name}

return answer
}

struct fileStruct {
var name: String
var Head: String
var Number: Int
}

/*
정렬 부분 참조
https://gonslab.tistory.com/35
*/


/*
다른 사람 풀이

extension String{
var numeric: ClosedRange<Character> { 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 }
}
*/
54 changes: 54 additions & 0 deletions 한근영/프렌즈4블록_level2.swift
Original file line number Diff line number Diff line change
@@ -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<answer)
return answer
}

0 comments on commit 34f9734

Please sign in to comment.