-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
243 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 } | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |